[英]HashMap<Key,List<Object>> from list of objects containing same property
我有一個對象列表。
例如
groupId = 1名稱= name1
groupId = 1名稱=名稱2
groupId = 1名稱=名稱3
groupId = 2名稱= name4
列表中的多個對象具有相同的groupId
值。 我需要創建具有相同groupId
的對象的子列表。 如何在Java中執行此操作。
我Inital的想法是創建一個HashMap<Integer,List<Object>>
但我不確定的不定值groupIds
進來,這又使我不能確定與同如何組對象groupIds
一起groupId
作為HashMap中的關鍵。
如果groupId將來不會更改或增加,我可以遍歷原始列表並編寫switch語句以創建所需的數組。
在Java 8中,您可以使用groupingBy
收集器 :
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);
}
我認為您需要這樣的地圖-
Map map = new HashMap<Integer, List<String>>();
其中key
的HashMap
是Integer
代表您groupId
(即- 1,2,3等)和value
-對的(1,名稱等IE) HashMap
存儲在List
的String
。
您可以使用以下步驟-
1.遍歷您的四個列表。
2.根據鍵groupId將每個項目添加到Map
構造(例如-here map
)中。
我認為此鏈接在這種情況下會有所幫助。
在Java 8中,您可以使用一些過濾器。
public class A {
public int groupId;
public String name;
public A(int groupId, String name) {
this.groupId = groupId;
this.name = name;
}
}
使用Collections 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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.