【发布时间】:2019-03-22 13:04:58
【问题描述】:
只是想知道我们是否可以在不编写自定义比较器类的情况下使用 Java 8 根据重复数字的频率对列表进行排序。
我需要根据给定整数的频率然后按自然数字顺序对给定的整数进行排序。
我在 Comparator.naturalOrder();
处遇到错误这是我尝试过的代码:
Integer[] given = new Integer[]{0,0,1,22,11,22,22,11,44,555,55,66,77,88,99};
List<Integer> intList = Arrays.asList(given);
Map<Integer, Long> frequencyMap = intList.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
List<Integer> newList = intList.stream().sorted(Comparator.comparing(frequencyMap::get).thenComparing(Comparator.naturalOrder())).collect(Collectors.toList());
System.out.println(newList.toString());
预期的输出是
[1, 44, 55, 66, 77, 88, 99, 555, 0, 0, 11, 11, 22, 22, 22]
PS:在第一行使用数组以避免list.add()在多行中并便于理解。
【问题讨论】:
-
您在这里打印的是原始 intList,而不是 collect() 创建的排序列表。
-
用新列表更新了系统输出。
标签: java sorting java-8 comparator