如何在Java中使用object属性对列表中的对象进行分组

如何在Java中使用object属性对列表中的对象进行分组,java,arraylist,linked-list,hashmap,java-stream,Java,Arraylist,Linked List,Hashmap,Java Stream,如何对列表中具有相同对象属性的所有对象进行分组?而不提及对象属性值 型号类别: public class Item { private String id; private String name; private String team } items.stream().filter(item -> "Elites".equals(item.team)).collect(Collectors.toList()); "item.team&quo

如何对列表中具有相同对象属性的所有对象进行分组?而不提及对象属性值

型号类别:

public class Item {
  private String id;
  private String name;
  private String team
}
items.stream().filter(item -> "Elites".equals(item.team)).collect(Collectors.toList());
"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}
"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}
List<Item> itemsListData = //Get the data
public static Map<String, List<Item>> groupItemsByTeam(Collection<Item> itemsList) {
    return itemsList.stream().collect(Collectors.groupingBy(Item::team));
}
//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("-------------------------------------------");
}
Team A : 
Item 1= Item 1 name
Item 2= Item 2 name
-------------------------------------------
Team G : 
Item 456= Item 456 name
Item 254= Item 254 name
-------------------------------------------
List items=new ArrayList()

我试过这个:

public class Item {
  private String id;
  private String name;
  private String team
}
items.stream().filter(item -> "Elites".equals(item.team)).collect(Collectors.toList());
"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}
"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}
List<Item> itemsListData = //Get the data
public static Map<String, List<Item>> groupItemsByTeam(Collection<Item> itemsList) {
    return itemsList.stream().collect(Collectors.groupingBy(Item::team));
}
//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("-------------------------------------------");
}
Team A : 
Item 1= Item 1 name
Item 2= Item 2 name
-------------------------------------------
Team G : 
Item 456= Item 456 name
Item 254= Item 254 name
-------------------------------------------
但这需要将团队名称作为参数传递

我们如何在不指定团队值的情况下对项目进行分组

并使用键作为项制作一个HashMap。teamvalue作为与该team.name&item.id的键值对的列表

像这样:

public class Item {
  private String id;
  private String name;
  private String team
}
items.stream().filter(item -> "Elites".equals(item.team)).collect(Collectors.toList());
"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}
"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}
List<Item> itemsListData = //Get the data
public static Map<String, List<Item>> groupItemsByTeam(Collection<Item> itemsList) {
    return itemsList.stream().collect(Collectors.groupingBy(Item::team));
}
//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("-------------------------------------------");
}
Team A : 
Item 1= Item 1 name
Item 2= Item 2 name
-------------------------------------------
Team G : 
Item 456= Item 456 name
Item 254= Item 254 name
-------------------------------------------

如果我们可以返回一个
映射
,其中键是
团队
,值是属于该团队的
列表
,我们可以使用

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

读者可能会认为或可能不会认为它“更令人愉快”。

来自

我已经为我提出的问题创建了一个完整的解决方案

创建具有以下结构的输出:

public class Item {
  private String id;
  private String name;
  private String team
}
items.stream().filter(item -> "Elites".equals(item.team)).collect(Collectors.toList());
"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}
"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}
List<Item> itemsListData = //Get the data
public static Map<String, List<Item>> groupItemsByTeam(Collection<Item> itemsList) {
    return itemsList.stream().collect(Collectors.groupingBy(Item::team));
}
//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("-------------------------------------------");
}
Team A : 
Item 1= Item 1 name
Item 2= Item 2 name
-------------------------------------------
Team G : 
Item 456= Item 456 name
Item 254= Item 254 name
-------------------------------------------
源数据:

public class Item {
  private String id;
  private String name;
  private String team
}
items.stream().filter(item -> "Elites".equals(item.team)).collect(Collectors.toList());
"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}
"item.team":{
    "item.id":"item.name",
    "item.id":"item.name",
    "item.id":"item.name",
    .....
}
List<Item> itemsListData = //Get the data
public static Map<String, List<Item>> groupItemsByTeam(Collection<Item> itemsList) {
    return itemsList.stream().collect(Collectors.groupingBy(Item::team));
}
//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("-------------------------------------------");
}
Team A : 
Item 1= Item 1 name
Item 2= Item 2 name
-------------------------------------------
Team G : 
Item 456= Item 456 name
Item 254= Item 254 name
-------------------------------------------

如果我们想要一个
列表
,那么我不确定这是否可行。是否可以将
列表
转换为
映射
,其中键是类型(如
字符串
),值是此类型的所有
列表
?@Turing85是的,在我的情况下
映射
给出了一个错误。我将其替换为
Map itemsByTeam
请更新您的答案,以便我可以接受it@Lenzman是的,现在为我工作。Eclipse给了我一个错误,并建议进行更改。