java8 ListHashMap 排序 lamada

209 阅读1分钟

一、排序实例:

 需求: 

    按照销量排序显示产品 ,pill 为药品对象      rank 属性为其销量


 code:

daMap.entrySet().stream()  
          .sorted(Map.Entry.comparingByValue(Comparator.comparing(Pill::getRank)))
            .collect(Collectors.toMap(                   
                         Map.Entry::getKey,
                        Map.Entry::getValue,                    
                        (oldVal, newVal) -> oldVal,                    
                           LinkedHashMap::new));

分析:

  1. 首先使用entrySet().stream() 将Map类型转换为Stream流类型。
  2. 然后使用sorted方法排序,排序的依据是Map.Entry.comparingByValue(),也就是按照Map的值排序, 而其值为一个object ,取object的rank属性排序
  3. 最后用collect方法将Stream流转成LinkedHashMap。 第一个参数是 原来的键,第二个参数为原来的值 ,重点看第三个参数,就是一个merge规则的lambda表达式,当出现重复的key,返回旧值一个即可。
  4. 请注意使用LinkedHashMap来存储排序的结果以保持顺序。默认情况Collectors.toMap()返回HashMapHashMap不能保证元素的顺序。

二、介绍下 java streams


  1. 将Map或List等集合类对象转换为Stream对象
  2. 使用Streams的sorted()方法对其进行排序
  3. 最终将其返回为LinkedHashMap(可以保留排序顺序)

sorted()方法以Comparator作为参数,从而可以按任何类型的值对Map进行排序。如果对Comparator不熟悉,可以看这个文章:juejin.cn/post/684490…


Java Stream函数式编程?用过都说好,案例图文详解送给ä½