2017-08-09 54 views
0

我正在嘗試對此進行排序。如何對HashMap中的值(ArrayList <String>)進行排序

{Cars=["B","Z","A"],Vegetables=["P","J","H"]} 

在這裏,汽車和蔬菜是關鍵,剩餘的是他們各自的價值觀,我們需要按價值進行排序。

答案應該是

{Cars=["A","B","Z"], Vegetables=["H","J","P"]} 

我嘗試使用

 List<Map.Entry<String,List<String>>> entries = new ArrayList<Map.Entry<String,List<String>>>(map.entrySet()); 
     Collections.sort(entries, new Comparator<Map.Entry<String,List<String>>>() { 
    public int compare(Map.Entry<String,List<String>> l1, Map.Entry<String,List<String>> l2) { 
        return l1.getValue().get(0).compareTo(l2.getValue().get(0)); 
      } 
    }); 

這不起作用的比較,它表現出錯誤的答案。你能幫我麼。我新收藏

回答

0

你必須只排序list<String>不是整個地圖。

entries.stream(). 
forEach(stringListMap1 -> stringListMap1.values().stream(). 
forEach(strings -> strings.sort((o1, o2) -> o1.compareTo(o2)))); 

在我的工作示例下面;

List cars = Arrays.asList("B","Z","A"); 
     List vegatable = Arrays.asList("H","J","P"); 
     Map<String,List<String>> stringListMap = new HashMap<>(); 
     stringListMap.put("cars",cars); 
     stringListMap.put("vegetables",vegatable); 
     List<Map<String,List<String>>> entries = new ArrayList(); 
      entries.add(stringListMap); 
       entries.stream().forEach(stringListMap1 -> 
stringListMap1.values().stream().forEach(strings -> strings.sort((o1, o2) -> o1.compareTo(o2)))); 
     System.out.println(entries); 

輸出

[{cars=[A, B, Z], vegetables=[H, J, P]}] 
相關問題