发现这个博客说的也挺好的,可以参考
根据key排序
map.entrySet().stream().sorted(Map.Entry.comparingByKey());
根据value排序
map.entrySet().stream().sorted(Map.Entry.comparingByValue());
⚠️并不是把map排序了,map本身没有变,只是map.sorted的结果是排序后的结果。
所以想要使用排序后的map可以有以下两种方式:
- 直接在stream上继续操作,比如将排序后的entry输出
map.entrySet().stream().sorted(Map.Entry.comparingByValue())
.forEach(System.out::println);
System.out::println
是一个方法引用,就是把System.out
类的println
方法作为函数参数传入forEach
函数。
比如我们还可以这样输出:
map.entrySet().stream().sorted(Map.Entry.comparingByValue()).forEach(this::show);
public void show(Entry<String, Integer> s) {
System.out.println(s.getKey() + ": " + s.getValue());
}
- 将map存下来,其实也是通过在流上继续操作实现
map = map.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.collect(
Collectors.toMap(x -> x.getKey(), x -> x.getValue(), (x1, x2) -> x2, LinkedHashMap::new));
升序/降序
方法默认是升序的,如果需要降序的话,就在sorted
里面加一个reverseOrder
map.entrySet().stream().sorted(Collections.reverseOrder(Entry.comparingByValue()))
.forEach(this::show);
输出结果:
网友评论