2014-09-22 112 views
0

我一直在尝试通过翻译后的值来对分面进行分组,但我总是得到的只是列表中最后一个对象(没有数据集)。这是我试过的:如何通过Java中的某个字段对某些对象进行分组?

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

你能提出什么建议吗?

+0

听起来你想使用MultiMap – Mik378 2014-09-22 13:31:15

+1

MulltiMap是你想要的方式。发生这种情况的原因是,您每次添加时都要替换ArrayList。为了解决你的实现,你需要检查是否已经有一个ArrayList的那个键。如果有的话,将Facet添加到列表中(如果没有),创建ArrayList并像您当前正在做的那样添加Facet – Michael 2014-09-22 13:34:18

回答

2

更改您的循环,如下

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

每当您使用新的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); 
} 
相关问题