这是我的功能:
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
我做错了什么?
答案 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);
}