开发过程中对象集合根据某个属性排序是常常遇到的情况,但有时排序会遇到对应属性值为null的情况,会报空指针异常。

查找stream.sorted源码看到有Comparator.nullsFirst和Comparator.nullsLast方法,使用方法如下:

  1.  
    List<User> list = Lists.newArrayList(new User("Y", "YY"), new User("A", "AA"), new User(null, "CC"));
  2.  
    list.stream().forEach(System.out::println);
  3.  
    System.out.println("------------------------------");
  4.  
     
  5.  
    List<User> nList = list.stream().sorted(
  6.  
    Comparator.comparing(User::getCode, Comparator.nullsFirst(String::compareTo)))
  7.  
    .collect(Collectors.toList());
  8.  
    nList.stream().forEach(System.out::println);
  9.  
     
  10.  
     
  11.  
     
  12.  
     
  13.  
    out:
  14.  
     
  15.  
    Y---YY
  16.  
    A---AA
  17.  
    null---CC
  18.  
    ------------------------------
  19.  
    null---CC
  20.  
    A---AA
  21.  
    Y---YY
  1.  
    class User {
  2.  
    public User(String code, String name) {
  3.  
    this.code = code;
  4.  
    this.name = name;
  5.  
    }
  6.  
     
  7.  
    private String code;
  8.  
    private String name;
  9.  
     
  10.  
    public String getCode() {
  11.  
    return code;
  12.  
    }
  13.  
     
  14.  
    public void setCode(String code) {
  15.  
    this.code = code;
  16.  
    }
  17.  
     
  18.  
    public String getName() {
  19.  
    return name;
  20.  
    }
  21.  
     
  22.  
    public void setName(String name) {
  23.  
    this.name = name;
  24.  
    }
  25.  
     
  26.  
    @Override
  27.  
    public String toString() {
  28.  
    return code + "---" + name;
  29.  
    }
  30.  
    }

Java8 stream sorted排序时包括null的更多相关文章

  1. java8 stream sorted

    1.对象类型配列 List<Person> list = Arrays.asList( new Person(22, "shaomch", "man" ...

  2. java8 Stream sorted()的一次调用链记录

    代码 public static void main (String[] args) { Stream.of("d2", "a2", "b1" ...

  3. 【Java必修课】一图说尽排序,一文细说Sorting(Array、List、Stream的排序)

    简说排序 排序是极其常见的使用场景,因为在生活中就有很多这样的实例.国家GDP排名.奥运奖牌排名.明星粉丝排名等,各大排行榜,给人的既是动力,也是压力. 而讲到排序,就会有各种排序算法和相关实现,本文 ...

  4. Java8 使用 stream().sorted()对List集合进行排序

    集合对像定义 集合对象以学生类(StudentInfo)为例,有学生的基本信息,包括:姓名,性别,年龄,身高,生日几项. 使用stream().sorted()进行排序,需要该类实现 Comparab ...

  5. java List递归排序,传统方式和java8 Stream优化递归,无序的列表按照父级关系进行排序(两种排序类型)

    当有一个List列表是无序的,List中的数据有parentid进行关联,通过java排序成两种排序类型: 所用的测试列表最顶级无parentid,若为特殊值,修改下判断方法即可. 第一种排序:按照树 ...

  6. java8 stream多字段排序

    注:转载请注明出处!!!!!!! 很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理 使用java8新特性,下面先来点基础的 List<类> ...

  7. Java Stream流排序null以及获取指定条数数据

    Java8的Stream流的一些用法, //排序 carerVehEntityList = carerVehEntityList.stream().sorted( Comparator.compari ...

  8. JAVA8 之 Stream sorted() 示例

    下面代码以自然序排序一个listlist.stream().sorted() 自然序逆序元素,使用Comparator 提供的reverseOrder() 方法list.stream().sorted ...

  9. 使用Java8 Stream API对Map按键或值进行排序

    一.什么是Java 8 Stream 使用Java 8 Streams,我们可以按键和按值对映射进行排序.下面是它的工作原理: 将Map或List等集合类对象转换为Stream对象 使用Streams ...

  10. java8 stream初试,map排序,list去重,统计重复元素个数,获取map的key集合和value集合

    //定义一个100元素的集合,包含A-Z List<String> list = new LinkedList<>(); for (int i =0;i<100;i++) ...

随机推荐

  1. 【Android】屏幕超时休眠

    前言 屏幕超时休眠指的是在设备一段时间没有操作后,自动关闭屏幕显示以节省电量并防止误触.当屏幕进入休眠状态时,通常会关闭屏幕背光,但设备可能仍在运行后台进程. 正文 Settings应用相关 Sett ...

  2. Kettle设置定时跑任务

    1.Kettle设置作业 保存,test.kjb 2. 创建批处理 zxjb.bat C: cd C:\kettle\pdi-ce-9.4.0.0-343\data-integration kitch ...

  3. cas5配置redis

    ​POM文件加载redis依赖,重新maven clean package <dependency> <groupId>org.apereo.cas</groupId&g ...

  4. 云数据备份 | CDN 日志备份最佳实践

    前言 ​ 内容分发网络(Content Delivery Network,CDN),是在现有 Internet 中增加的一层新的网络架构,可以有效降低用户访问延迟,提升可用性. CDN 按照小时粒度对 ...

  5. 评 PowerShell

    近来不得不接触 pwsh,发现竟然设计的这么漂亮. pwsh 的设计出发点:pwsh 的命令都是面向对象的,命令返回的是对象,命令传入的也是对象.对象在命令的管道间传递,从而组合出复杂任务. 这和 l ...

  6. Qt/C++离线读取全国任意经纬度高程海拔值/无任何依赖/纯原创代码解析

    一.前言说明 做地图开发会遇到一个常规需求,就是获取当前经纬度对应的海拔高度,也叫做高程值,很遗憾各大地图厂商都未提供接口获取,可能是有明文规定,不能地图中提供对应的海拔高度值,于是需要另想他法,尽管 ...

  7. UML之关联

    关联指两个类之间的各种联系.UML使用各种单实线表示关联,这个单实线可以是直线(垂直的.水平的或者倾斜的).折线甚至曲线. 事实上,关联也是展示类的属性的另一外的一种形式.例如在下图中,我们通过一条实 ...

  8. 开源即时通讯IM框架MobileIMSDK的微信小程序端开发快速入门

    一.理论知识准备 您需要对微信小程序开发有所了解: 1)真正零基础入门学习笔记系列 2)从零开始的微信小程序入门教程 3)最全教程:微信小程序开发入门详解 您需要对WebSocket技术有所了解: 1 ...

  9. LRU的map+双链表实现(Go描述)

    面云账户时候问了LRU,具体实现的方式是map+双链表.Set和Get的时间复杂度都是O(1).完整写一遍复习一下, 仅作记录 /** * @Author: lzw5399 * @Date: 2021 ...

  10. 『AotuHotKey』——一个小巧却高效的实用效率工具

    [!note] 本来主要是想找一下「」和『』,然后这个方法直接可以找到大部分的特殊字符 通过输入法输出 『Ctr + shift + Z』进入搜狗输入法的『符号大全』 在『标点符号』项可以找到「」和『 ...