如何在Java中按某些字段对某些对象进行分组?

时间:2014-09-22 13:28:25

标签: java hashmap grouping

我一直试图通过翻译的值来组合facet,但我总是得到的只是List上的最后一个对象(没有数据集)。这是我试过的:

HashMap<String, List<Facet>> map = new HashMap<>();

for (Facet facet : getFacets()) {
        map.put(facet.getTranslatedValue(), new ArrayList<com.schneider.gss.model.Facet>());
        map.get(facet.getTranslatedValue()).add(facet);
    }

你能提出什么建议吗?

3 个答案:

答案 0 :(得分:2)

更改你的for循环,如下所示

for (Facet facet : getFacets()) {
        if(map.get(facet.getTranslatedValue()) == null) {
            map.put(facet.getTranslatedValue(), new ArrayList<com.schneider.gss.model.Facet>());
        }
        map.get(facet.getTranslatedValue()).add(facet);
    }

答案 1 :(得分:1)

每次使用新的ArrayList获得相同的翻译值时,您都会覆盖列表。相反,您应该检查它是否存在:

HashMap<String, List<Facet>> map = new HashMap<>();

for (Facet facet : getFacets()) {
    //get the list
    ArrayList<com.schneider.gss.model.Facet> list = map.get(facet.getTranslatedValue());
    //if list doesn't exist, create it
    if(list == null) {
        map.put(facet.getTranslatedValue(), new ArrayList<com.schneider.gss.model.Facet>());
    }
    //then add to list
    map.get(facet.getTranslatedValue()).add(facet);
}

答案 2 :(得分:0)

在番石榴中有一个班级Multimap(或ArrayListMultimap)可以完全满足您的需求