簡體   English   中英

如何按 java 8 分組並從父級收集 id

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM