Java Map中的排序

2022-10-25  本文已影响0人  树里的熊

发现这个博客说的也挺好的,可以参考

根据key排序

map.entrySet().stream().sorted(Map.Entry.comparingByKey());

根据value排序

map.entrySet().stream().sorted(Map.Entry.comparingByValue());

⚠️并不是把map排序了,map本身没有变,只是map.sorted的结果是排序后的结果。

所以想要使用排序后的map可以有以下两种方式:

  1. 直接在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());
  }
  1. 将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);

输出结果:

上一篇下一篇

猜你喜欢

热点阅读