[英]How to group by java 8 and collect ids from parent
我有一個 class A
Company {
String name;
Logo logo;
}
Logo {
int color; //can have values=1 (green),2 (red),3 (blue) ...
String name;
String address;
}
Output 需要:對於每種類型 1,2,3 按顏色對 Logo 的所有實例進行分組。 對於每個這樣的組,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()))
這會產生一個 map 的徽標和計數 如何獲得公司名稱?
如果您要查找所有為其logo
color
的公司,您應分組為:
Map<Integer, List<Company>> collect = company.stream()
.collect(Collectors.groupingBy(e -> e.getLogo().getColor()));
以防萬一,這些值的計數不重要,然后您應該使用Collectors.counting
,例如:
Map<Integer, Long> count = company.stream()
.collect(Collectors.groupingBy(e -> e.getLogo().getColor(),
Collectors.counting()));
簡而言之,如果您希望值是Company
本身的類型,請不要map
和 stream。
編輯:根據評論,如果想法是將Company
轉換為其name
,您可以將 map 分組。 使用Collectors.mapping
例如:
Map<Integer, List<String>> collect = company.stream()
.collect(Collectors.groupingBy(e -> e.getLogo().getColor(),
Collectors.mapping(Company::getName, Collectors.toList())));
您可以使用groupingby
收集器,然后使用mapping
收集器。
companis.stream()
.collectors(Collectors.groupingBy (c->c.getLogo().getColor(),
Collectors.mapping (Company::getName,Collectors.toList()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.