目录
一、Stream 相关
1、findFirst 方法
Stream的findFirst方法在此流中查找第一个元素作为Optional。
如果流中没有元素,findFirst返回空的Optional。
如果流没有顺序,那么findFirst可以选择任何元素。
如果findFirst选择的元素为null,它将抛出NullPointerException。
二、Optional
JDK 1.8加入了 Optional 类。用于避免用if判空时出现空指针异常,它就是一个包裹着对象的容器。如果值存在则 isPresent()方法会返回 true,调用 get() 方法会返回该对象。
1、如何构造Optional
JDK 提供三个静态方法来构造一个 Optional:
-
Optional.of(T value) 该方法通过一个非 null 的 value 来构造一个 Optional,返回的 Optional 包含了 value 这个值。对于该方法,传入的参数一定不能为 null,否则便会抛出 NullPointerException。
-
Optional.ofNullable(T value) 该方法和 of 方法的区别在于,传入的参数可以为 null,进行三目运算,判断传入的参数是否为 null,如果为 null 的话,返回的就是 Optional.empty()。
-
Optional.empty()该方法用来构造一个空的 Optional,即该 Optional 中不包含值 —— 其实底层实现还是 如果 Optional 中的 value 为 null 则该 Optional 为不包含值的状态,然后在 API 层面将 Optional 表现的不能包含 null 值,使得 Optional 只存在 包含值 和 不包含值 两种状态。
2、ifPresent 方法
如果 Optional 中有值,则对该值调用 consumer.accept,否则什么也不做。