繁体   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