通过DESC计算并列出列表排序计数内的事件

时间:2017-07-07 14:39:09

标签: java list

这是我的功能:

public static void countKeywords(List<String> list) {
    Map<String, Long> counts =
            list.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()));
    System.out.println(counts);
}

以下是它输出的样本:

{alarm=2, player=1, factory=3}

我需要按发生次数按降序排序。所以输出必须像:

  factory - 3
  alarm - 2
  player - 1 

我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题是您使用的数据结构。法线贴图不保证订单或排序。如果您使用Map作为结构,我会看一下TreeMap API。它允许您在地图构造函数中定义比较器。

https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html

public static void countKeywords(List<String> list) {
    Map<String, Long> counts = list.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()));
    System.out.println(counts);

    TreeMap<String, Long> sortedMap = new TreeMap<String, Long>(new Comparator<String>() {
        @Override
        public int compare(String key1, String key2) {
            return counts.get(key2).compareTo(counts.get(key1));
        }
    });

    sortedMap.putAll(counts);
    System.out.println(sortedMap);
}