HashMap <Key,List <Object >>来自包含相同属性的对象列表

Nir*_*ari 1 java android list hashmap

我有一个对象列表.

例如>

对象1

groupId = 1 name = name1

对象2

groupId = 1 name = name2

对象3

groupId = 1 name = name3

对象4

groupId = 2 name = name4

List中的多个对象具有相同的值groupId.我需要创建具有相同对象的子列表groupId.我如何用Java做到这一点.

我的Inital想法是创造一个,HashMap<Integer,List<Object>>但我不确定groupIds进入的不确定值,这反过来让我不确定如何将对象与hashmap的键groupIds组合在一起groupId.

如果groupId将来不会改变或增加,我可以迭代原始列表并编写一个switch语句来创建所需的数组.

ass*_*ias 6

在Java 8,你可以使用groupingBy收集器:

Map<String, List<MyObject>> map = list.stream()
               .collect(Collectors.groupingBy(MyObject::getGroupId));
Run Code Online (Sandbox Code Playgroud)


Nir*_*ari 6

我就是这样做的。我使用它是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);
        }
Run Code Online (Sandbox Code Playgroud)