如何按Java8分组并从父级收集ID
我有一个甲级如何按Java8分组并从父级收集ID,java,java-8,java-stream,grouping,Java,Java 8,Java Stream,Grouping,我有一个甲级 Company { String name; Logo logo; } Logo { int color; //can have values=1 (green),2 (red),3 (blue) ... String name; String address; } 所需输出:对于每种类型1、2、3,按颜色分组所有徽标实例。对于每个这样的组,A.id是什么 给我公司的颜色标志。 例如,哪些公司有红色徽标 我试着跟着 Input List<Company
Company {
String name;
Logo logo;
}
Logo {
int color; //can have values=1 (green),2 (red),3 (blue) ...
String name;
String address;
}
所需输出:对于每种类型1、2、3,按颜色分组所有徽标实例。对于每个这样的组,A.id是什么
给我公司的颜色标志。
例如,哪些公司有红色徽标
我试着跟着
Input
List<Company> company = {//initialization}
company.stream().map(e -> e.getLogo())
.collect(Collectors.groupingBy(e -> {Logo b = new Logo();
b.setType(e.getType();
return b;}, Collectors.counting()))
输入
列表公司={//初始化}
company.stream().map(e->e.getLogo())
.collect(Collectors.groupingBy(e->{Logo b=newlogo());
b、 setType(如getType();
返回b;},Collectors.counting())
这将生成一个徽标地图,并计算如何获得公司名称?如果您要查找所有具有
颜色的徽标的公司,您应分组为:
Map<Integer, List<Company>> collect = company.stream()
.collect(Collectors.groupingBy(e -> e.getLogo().getColor()));
简而言之,如果希望值的类型为公司本身,则不要映射流
编辑:根据评论,如果想法是将公司
转换为其名称
,则可以在分组后进行映射。使用收集器。映射
,例如:
Map<Integer, List<String>> collect = company.stream()
.collect(Collectors.groupingBy(e -> e.getLogo().getColor(),
Collectors.mapping(Company::getName, Collectors.toList())));
Map collect=company.stream()
.collect(收集器.groupingBy(e->e.getLogo().getColor(),
Collectors.mapping(Company::getName,Collectors.toList());
如果您要查找所有公司的徽标颜色,您应将其分组为:
Map<Integer, List<Company>> collect = company.stream()
.collect(Collectors.groupingBy(e -> e.getLogo().getColor()));
简而言之,如果希望值的类型为公司本身,则不要映射流
编辑:根据评论,如果想法是将公司
转换为其名称
,则可以在分组后进行映射。使用收集器。映射
,例如:
Map<Integer, List<String>> collect = company.stream()
.collect(Collectors.groupingBy(e -> e.getLogo().getColor(),
Collectors.mapping(Company::getName, Collectors.toList())));
Map collect=company.stream()
.collect(收集器.groupingBy(e->e.getLogo().getColor(),
Collectors.mapping(Company::getName,Collectors.toList());
您可以使用分组方式
收集器,然后使用映射
收集器
companis.stream()
.collectors(Collectors.groupingBy (c->c.getLogo().getColor(),
Collectors.mapping (Company::getName,Collectors.toList()));
您可以使用groupingby
collector,然后使用mapping
collector
companis.stream()
.collectors(Collectors.groupingBy (c->c.getLogo().getColor(),
Collectors.mapping (Company::getName,Collectors.toList()));
对我来说,你的问题不清楚!你想要有红色标志的公司吗?那你为什么要对它们进行分组?我想要每个颜色标志的公司。红色={a,b,c}绿色={e,m,g}…对我来说,你的问题不清楚!你想要有红色标志的公司吗?那么你为什么要对它们进行分组?我想要每个颜色标志的公司。红色={a,b,c}绿色={e,m,g}…谢谢!这给了我Set如何将其转换为Set字符串,它只是公司的名称,而不是整个公司对象。我可以通过迭代整个集合来完成,收集每个值并在其上执行getName。但我觉得,应该有一种更简洁的方法。*给了我MapThank!这给了我Set如何将其转换为Set字符串,它只是t公司名称,而不是整个公司对象。我可以通过迭代整个集合来完成,收集每个值并在其上执行getName。但我觉得,应该有一种更简洁的方法。*给我一张地图