簡體   English   中英

如何使用 Java 中的 object 屬性對列表中的對象進行分組

[英]How to group objects in a list with object property in Java

如何將具有相同 Object 屬性的列表中的所有對象分組 無需提及 Object 屬性值。

Model Class:

public class Item {
  private String id;
  private String name;
  private String team
}

List<item> items = new ArrayList();

我試過這個:

items.stream().filter(item -> "Elites".equals(item.team)).collect(Collectors.toList());

但這需要將團隊名稱作為參數傳遞。

我們如何在不指定團隊價值的情況下對項目進行分組?

並以Key為項目制作HashMap teamvalue作為具有該 team.name 和 item.id 的鍵值對列表

像這樣:

"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}

如果我們可以返回一個Map<String, List<Item>> ,其中鍵是team ,值是屬於該團隊的List<Item> ,我們可以使用

final Map<String, List<Item>> itemsByTeam = 
    items.stream().collect(Collectors.groupingBy(item -> item.team));

Ideone 演示

備注:此解決方案最初是由另一個用戶在評論中發布的,不久之后他們刪除了該評論。 我不記得用戶的名字。 如果他們發布答案,我將刪除我的。 如果他們不想發布答案,但與我聯系,我將通過姓名記入他們的姓名。

對代碼的評論:我建議為屬性引入 getter,因為stream操作最有可能在 class Item本身之外調用,因此屬性team將不可見。 此外,這將導致類似的實現

final Map<String, List<Item>> itemsByTeam = 
    items.stream().collect(Collectors.groupingBy(Item::getTeam));

這可能會或可能不會被認為對讀者“更令人愉悅”。

Turing85接受的答案。

我為我提出的問題創建了一個完整的解決方案

創建具有以下結構的 output:

"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}

源數據:

List<Item> itemsListData = //Get the data

Function 對項目進行分組:

public static Map<String, List<Item>> groupItemsByTeam(Collection<Item> itemsList) {
    return itemsList.stream().collect(Collectors.groupingBy(Item::team));
}

構造由groupItemsByTeam返回的項目列表:

//GET THE GROUPED DATA
Map<String, List<Item>> result = groupItemsByTeam(itemsListData);

//STRUCTURE THE GROUPED DATA
for (Entry<String, List<Item>> parentItem : result .entrySet()) {
    System.out.println(parentItem .getKey() + " : "); // item.team value

    for (Item childItem : parentItem.getValue()) {
        System.out.println(childItem.getKEY() + " = " + childItem.getVALUE());
    }
    System.out.println("-------------------------------------------");
}

OUTPUT:

Team A : 
Item 1= Item 1 name
Item 2= Item 2 name
-------------------------------------------
Team G : 
Item 456= Item 456 name
Item 254= Item 254 name
-------------------------------------------

參考來自baeldung.com

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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