如何在HashMap中对值(ArrayList <string>)进行排序

时间:2017-08-09 11:12:38

标签: collections

我正在尝试对此进行排序。

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

这不起作用,它显示了错误的答案。你能帮我么。我是收藏品的新手

1 个答案:

答案 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]}]