2014-09-22 93 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); 
} 
相關問題