java: 示例:输入List内容为(1,3,3 ,3 ,5,5 ,4,4,4,8,8,8,8),输出Map 内容为(1:1,5:2,3:3,4:3,8:4)先根据value来进行排序,如果value相同,则根据键来排
时间: 2024-10-25 18:12:32 浏览: 7
在Java中,你可以使用`Stream` API和`Collectors`来实现这个需求。首先,你需要创建一个函数来组合键值对,并根据提供的规则排序。以下是一个示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 3, 3, 3, 5, 5, 4, 4, 4, 8, 8, 8, 8);
Map<Integer, Integer> result = numbers.stream()
.collect(Collectors.groupingBy(num -> num,
Collectors.collectingAndThen(Collectors.toList(), list -> {
// 首先按值排序,然后如果有相同的值再按键排序
list.sort(Comparator.comparingInt(a -> a));
return list.stream().collect(Collectors.toMap(
Function.identity(),
Collections.frequency,
(oldValue, newValue) -> oldValue,
LinkedHashMap::new)); // 使用LinkedHashMap保持插入顺序
})));
System.out.println(result); // 输出: {1=1, 3=3, 4=3, 5=2, 8=4}
}
}
```
在这个例子中,我们首先通过`groupingBy`收集具有相同值的元素列表。然后,使用`toList`收集所有子列表并将它们转换回`List`。接着,我们对每个子列表进行排序。最后,我们将排序后的列表转换回`Map`,其中键值对的键是原始数字,值是该数字的数量。
阅读全文