Java 具有自定义密钥名称的Collectors.groupingBy
我有一门课,比如说CheeseMojo,有如下不同的领域:Java 具有自定义密钥名称的Collectors.groupingBy,java,java-8,java-stream,Java,Java 8,Java Stream,我有一门课,比如说CheeseMojo,有如下不同的领域: public class CheeseMojo { private String recipies = "Recipies"; private int age; private String name; private int submissionId; //getter/setter } 现在我想使用Collectors.groupingBy函数根据submissionId对其进行排序,然后下
public class CheeseMojo {
private String recipies = "Recipies";
private int age;
private String name;
private int submissionId;
//getter/setter
}
现在我想使用Collectors.groupingBy函数根据submissionId对其进行排序,然后下面的代码片段将完成这项工作
Map<Integer,List<CheeseMojo>> map = new HashMap<>();
map = cheeseMojos.stream().collect(Collectors.groupingBy(CheeseMojo::getSubmissionId));
但我希望我的输出如下:
{1=[CheeseMojo@111111],2=[CheeseMojo@222222]}
{"Recipies1"=[CheeseMojo@111111],"Recipies2"=[CheeseMojo@222222]}
请帮助为什么不在收集之前映射密钥(比如创建一个具有
public class CheeseMojoWrapper {
private final String id;
private final CheeseMojo wrapped;
public CheeseMojoWrapper(CheeseMojo toWrap) {
id = "Recipe" + toWrap.getId();
wrapped = toWrap;
}
}
或者在生成的映射的
entrySet()
上使用流…您希望如何拥有一个具有两个相同键的映射?键是什么,存储的对象是什么?您描述了一个没有唯一键的映射,我不确定存储的对象是什么,但我假设它仍然是一个列表。它可以是{“Recipies”=[CheeseMojo@111111, CheeseMojo@222222]}
,但是使用适当的数据类型,例如映射
映射不能有两个相同的键。您应该使用另一个数据结构,或者更改所需的输出。好的,对不起,我的错误。更新了查询,请检查