2017-08-09 106 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]}] 
相关问题