首页 > 解决方案 > 带有自定义键名的 Collectors.groupingBy

问题描述

我有课让我们说 CheeseMojo 有以下各个领域:

public class CheeseMojo {
    private String recipies = "Recipies";
    private int age;
    private String name;
    private int submissionId;
    //getter/setter
}

现在我想使用 Collectors.groupingBy 函数根据 submitId 对其进行排序,然后下面的代码片段将完成这项工作

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]}

请帮忙

标签: javajava-8java-stream

解决方案


为什么map在收集之前你不只是关键(让我们说通过创建一个包装类的实例,它有

public class CheeseMojoWrapper { 
    private final String id;
    private final CheeseMojo wrapped;

    public CheeseMojoWrapper(CheeseMojo toWrap) {
        id = "Recipe"  + toWrap.getId();
        wrapped = toWrap;
   }
}

entrySet()或在生成的地图上使用流...


推荐阅读