java - Java-8 流:转换 List<{String,List}> 到地图>
问题描述
我有一个包含项目列表的标记类
class Tag {
private String tagName
private List<String> items
}
我有一个标签列表,其中每个标签都是一个项目列表
List<Tag> tagList = [
{"tagName": "popular", "items": ["Item1","Item2","Item3","Item4"]},
{"tagName": "expensive" , "items": ["Item2","Item4","Item5"]},
{"tagName": "mostwanted", "items": ["Item1","Item2","Item5"]}
]
我想把它转换成一个地图,其中项目作为键,标签名作为值。
预期输出:
{
"Item1" : ["popular","mostwanted"],
"Item2" : ["popular","expensive","mostwanted"],
"Item3" : ["popular","mostwanted"],
"Item4" : ["popular","expensive"],
"Item5" : ["expensive","mostwanted"]
}
我尝试了流/faltmap/groupingBy 的各种组合,但没有得到预期的输出。你能帮忙吗?谢谢
解决方案
您可以将items
using变平,flatMap
然后创建对item
和tagName
using SimpleEntry
。item
然后通过使用groupingBy
和映射分组tagName
以获取列表tagName
Map<String, List<String>> tagMap = tagList.stream()
.flatMap(t -> t.getItems()
.stream()
.map(item -> new AbstractMap.SimpleEntry<>(item, t.getTagName())))
.collect(Collectors.groupingBy(m -> m.getKey(),
Collectors.mapping(m -> m.getValue(), Collectors.toList())));
推荐阅读
- html - 将图像放在 div 的中心
- html - 如何将特定文本隐藏在使用CSS的元素?
- laravel-5 - php artisan serve 不工作,错误“”在 ProviderRepository.php 第 208 行:找不到类 'Intervention\Image\ImageServiceProvider'“”
- sql - Oracle SQL:如何将列标题的第一个字符而不是值大写?
- javascript - 无法在未安装的组件上设置状态
- java - POST 请求来自邮递员,但不是来自 java 代码
- vim - Seeing_is_believing vim 插件的键映射
- azure - Azure 门户问题/ARM 模板/服务总线
- python - 张量流检测模型动物园
- c# - 更新视图不起作用(通过绑定属性)