簡體   English   中英

哈希圖 <Key,List<Object> &gt;來自包含相同屬性的對象列表

[英]HashMap<Key,List<Object>> from list of objects containing same property

我有一個對象列表。

例如

對象1

groupId = 1名稱= name1

對象2

groupId = 1名稱=名稱2

對象3

groupId = 1名稱=名稱3

對象4

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>>();  

其中keyHashMapInteger代表您groupId (即- 1,2,3等)和value -對的(1,名稱等IE) HashMap存儲在ListString

您可以使用以下步驟-

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.

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