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<>()));