Java 计数和列表内的列表出现次数按描述排序计数
以下是我的功能:Java 计数和列表内的列表出现次数按描述排序计数,java,list,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); } 我需要它是按下降方向的发生计数排序
public static void countKeywords(List<String> list) {
Map<String, Long> counts =
list.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()));
System.out.println(counts);
}
我需要它是按下降方向的发生计数排序的。因此,输出必须如下所示:
factory - 3
alarm - 2
player - 1
我做错了什么?问题是您使用的数据结构。普通映射不能保证顺序或排序。如果您开始使用映射作为结构,我将看一看treemapapi。它允许您在映射构造函数中定义一个比较器
公共静态void countKeywords(列表){
Map counts=list.stream().collect(Collectors.groupingBy(e->e,Collectors.counting());
系统输出打印项次(计数);
TreeMap sortedMap=新的TreeMap(新的比较器(){
@凌驾
公共整数比较(字符串键1、字符串键2){
返回counts.get(键2).compareTo(counts.get(键1));
}
});
分类地图putAll(计数);
系统输出打印项次(分类地图);
}
你试过使用Collections.sort吗?@ZeldaZach确切的位置在哪里?我觉得这是一个家庭作业问题,所以我会让你找出这一部分:)我将它标记为Java 8的副本Wordcount的可能副本
factory - 3
alarm - 2
player - 1
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);
}