Java 8列表<;K>;进入地图<;K、 列表<;字符串>&燃气轮机;
我有一张单子Java 8列表<;K>;进入地图<;K、 列表<;字符串>&燃气轮机;,java,Java,我有一张单子 List<MyObject> list; 非常感谢帮助第二个参数需要一个函数将项目转换为将放置在地图中的值。但是,您提供了Collections.emptyList(),它不是函数 看起来您希望每个项目都有一个空列表,所以请更改 Collections.emptyList() 到 但是,返回一个不可变的空列表,这可能不是您想要的 返回一个空列表(不可变)。此列表可序列化 你可能想要 item -> new ArrayList<>() item->
List<MyObject> list;
非常感谢帮助第二个参数需要一个函数
将项目转换为将放置在地图中的值。但是,您提供了Collections.emptyList()
,它不是函数
看起来您希望每个项目都有一个空列表,所以请更改
Collections.emptyList()
到
但是,返回一个不可变的空列表,这可能不是您想要的
返回一个空列表(不可变)。此列表可序列化
你可能想要
item -> new ArrayList<>()
item->newarraylist()
您尚未指定每个列表的字符串元素的来源
如果它们来自每个MyObject
实例,您可以尝试使用with而不是收集器。toMap
:
Map<MyObject, List<String>> map = list.stream()
.collect(Collectors.groupingBy(
item -> item,
Collectors.mapping(item -> item.getSomeStringAttribute(),
Collectors.toList())));
其中someMethod
如下所示:
String someMethod(MyObject item) {
// TODO get/calculate the String from the item
}
另一方面,如果您只想初始化一个映射,将空列表作为每个MyObject
实例的值,则不需要流:
Map<MyObject, List<String>> map = new HashMap<>();
list.forEach(item -> map.put(item, new ArrayList<>()));
Map Map=newhashmap();
list.forEach(item->map.put(item,newarraylist());
@csmckelvey更新了您想要的问题.collect(Collectors.toMap(item->item,item->Collections.emptyList())代码>;两个参数都必须是返回相关值的Function
s。所有键的值都应该是空列表吗?你不想在这些列表中填入一些数据吗?如果是,这些数据来自何方?每个列表的元素是否可能对应于MyObject
的属性?@Kousha那么您应该接受它作为答案,以便其他人可以依赖它。@客人抱歉,正在等待缓冲时间用完!!现在标记
Map<MyObject, List<String>> map = list.stream()
.collect(Collectors.groupingBy(
item -> item,
Collectors.mapping(item -> item.getSomeStringAttribute(),
Collectors.toList())));
Map<MyObject, List<String>> map = list.stream()
.collect(Collectors.groupingBy(
item -> item,
Collectors.mapping(item -> someMethod(item),
Collectors.toList())));
String someMethod(MyObject item) {
// TODO get/calculate the String from the item
}
Map<MyObject, List<String>> map = new HashMap<>();
list.forEach(item -> map.put(item, new ArrayList<>()));