Java Map中的排序

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

根据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);

输出结果:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容