java8-stream流的sorted 排序
介绍
排序一般按照某个字段进行进行升序或者降序排,我们自己实现排序一般会用冒泡,快排序,二分法等
如果用sorted排序,以前上百行的代码现在只需要几行代码搞定,增强的代码的简洁性
升序
List<Integer> list = Arrays.asList(10,6, 39 14);
List<Integer> filter1 = list.stream()
.sorted(Comparator.comparing(Integer::intValue))
.collect(Collectors.toList());
降序reversed()
List<Integer> filter2 = list.stream()
.sorted(Comparator.comparing(Integer::intValue).reversed())
.collect(Collectors.toList());
三、多字段排序
关键字thenComparing
1.先以 某维度升序
2.当某维度相同时,在以另一维度升序
List<userInfo> userList3 = userList.stream()
.sorted(Comparator.comparing(userInfo::getA()).thenComparing(userInfo::getId())
.collect(Collectors.toList());
拓展,比如我们是判断某集合中对象的某个值在另外一个集合包含的往前排,其它数据再按照某字段进行排序
我们可以将集合先进行判断给包含某字段的对象新增一个字段设置值位1 ,其它的设置为2
然后先对 这个字段进行排序再按照另外的字段排序就可以达到这个效果
四、多字段区分升序降序
关键字thenComparing、Comparator.reverseOrder()
1.先以 某维度升序
2.当 某维度相同时,在以 另一维度降序
Comparator.reverseOrder()
List<userInfo> userList3 = userList.stream()
.sorted(Comparator.comparing(userInfo::getA()).thenComparing(userInfo::getId(),Comparator.reverseOrder()))
.collect(Collectors.toList());