我有一个像这样的字符串列表:{3,2,2,1,1,1,1,4,4,4}而且我想按值的重复数量对其进行排序,以使它成为{1 ,1,1,1,2,2,4,4,4,3}感谢您的关注
答案 0 :(得分:3)
您可以使用Collections.frequency和Comparator.comparingInt
根据重复对列表进行排序Comparator.comparingInt(i->Collections.frequency(list, i)).reversed()
下面是示例
List<Integer> list = new ArrayList<>(List.of(3,2,2,1,1,1,1,4,4,4));
System.out.println(list);
list.sort(Comparator.comparingInt(i->Collections.frequency(list, i)).reversed());
System.out.println(list); //[1, 1, 1, 1, 4, 4, 4, 2, 2, 3]
您可以通过将元素分组并计数到Map<Integer, Long>
中,然后创建另一个排序列表Collections.nCopies
List<Integer> result = list.stream()
.collect(Collectors.groupingBy(Function.identity(),Collectors.counting()))
.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.map(entry->Collections.nCopies(entry.getValue().intValue(), entry.getKey()))
.flatMap(List::stream)
.collect(Collectors.toList());