HashMap<Key,List<Object>> 来自包含相同 属性 的对象列表
HashMap<Key,List<Object>> from list of objects containing same property
我有一个对象列表。
例>
对象 1
groupId=1
姓名=姓名1
对象 2
groupId=1
姓名=姓名2
对象 3
groupId=1
姓名=姓名3
对象 4
groupId=2
姓名=姓名4
列表中的多个对象具有相同的 groupId
值。我需要创建具有相同 groupId
的对象的子列表。我如何在 Java.
中执行此操作
我最初的想法是创建一个 HashMap<Integer,List<Object>>
但我不确定 groupIds
的不确定值是否会进来,这反过来又让我不确定如何将具有相同 [=15= 的对象分组] 连同 groupId
作为哈希映射的键。
如果 groupId 将来不会更改或增加,我可以迭代原始列表并编写一个 switch 语句来创建所需的数组。
我认为您需要这样的地图 -
Map map = new HashMap<Integer, List<String>>();
其中 HashMap
中的 key
是 Integer
代表您的 groupId
(即 - 1、2、3 等)和 value
(即 - HashMap
的名称 1、名称 2 等)存储在 String
的 List
中。
您可以使用以下步骤 -
1. 遍历你的四个列表。
2. 将每个项目添加到一个 Map
构造(例如 - 这里 map
)基于关键 groupId。
我认为 this link 在这种情况下会有所帮助。
在Java 8中你可以使用一些过滤器。
public class A {
public int groupId;
public String name;
public A(int groupId, String name) {
this.groupId = groupId;
this.name = name;
}
}
使用集合过滤 API
ArrayList<A> list=new ArrayList();
list.add(new A(2, "tom"));
list.add(new A(2, "rome"));
list.add(new A(1, "sam"));
List<A> filteredlist = list.stream().filter(p -> p.groupId==2).collect(Collectors.toList());
使用 Java 8 你可以使用 the groupingBy
collector:
Map<String, List<MyObject>> map = list.stream()
.collect(Collectors.groupingBy(MyObject::getGroupId));
我是这样做的。我使用 LinkedHashMap<K,V>
因为我必须保留我根据对象的优先级值 属性.
排序的对象的顺序
LinkedHashMap<Group, List<Object>> hashMap=new LinkedHashMap<Group, List<Object>>();
for(Object model:objects){
if(!hashMap.containsKey(model.getGroup())){
List<Object> list= new ArrayList<Object>();
list.add(model);
hashMap.put(Group,list);
}
else{
hashMap.get(model.getGroup()).add(model);
}
我有一个对象列表。
例>
对象 1
groupId=1 姓名=姓名1
对象 2
groupId=1 姓名=姓名2
对象 3
groupId=1 姓名=姓名3
对象 4
groupId=2 姓名=姓名4
列表中的多个对象具有相同的 groupId
值。我需要创建具有相同 groupId
的对象的子列表。我如何在 Java.
我最初的想法是创建一个 HashMap<Integer,List<Object>>
但我不确定 groupIds
的不确定值是否会进来,这反过来又让我不确定如何将具有相同 [=15= 的对象分组] 连同 groupId
作为哈希映射的键。
如果 groupId 将来不会更改或增加,我可以迭代原始列表并编写一个 switch 语句来创建所需的数组。
我认为您需要这样的地图 -
Map map = new HashMap<Integer, List<String>>();
其中 HashMap
中的 key
是 Integer
代表您的 groupId
(即 - 1、2、3 等)和 value
(即 - HashMap
的名称 1、名称 2 等)存储在 String
的 List
中。
您可以使用以下步骤 -
1. 遍历你的四个列表。
2. 将每个项目添加到一个 Map
构造(例如 - 这里 map
)基于关键 groupId。
我认为 this link 在这种情况下会有所帮助。
在Java 8中你可以使用一些过滤器。
public class A {
public int groupId;
public String name;
public A(int groupId, String name) {
this.groupId = groupId;
this.name = name;
}
}
使用集合过滤 API
ArrayList<A> list=new ArrayList();
list.add(new A(2, "tom"));
list.add(new A(2, "rome"));
list.add(new A(1, "sam"));
List<A> filteredlist = list.stream().filter(p -> p.groupId==2).collect(Collectors.toList());
使用 Java 8 你可以使用 the groupingBy
collector:
Map<String, List<MyObject>> map = list.stream()
.collect(Collectors.groupingBy(MyObject::getGroupId));
我是这样做的。我使用 LinkedHashMap<K,V>
因为我必须保留我根据对象的优先级值 属性.
LinkedHashMap<Group, List<Object>> hashMap=new LinkedHashMap<Group, List<Object>>();
for(Object model:objects){
if(!hashMap.containsKey(model.getGroup())){
List<Object> list= new ArrayList<Object>();
list.add(model);
hashMap.put(Group,list);
}
else{
hashMap.get(model.getGroup()).add(model);
}