Java8新特性总结 - 2.Optional类

所有示例代码打包下载 : 点击打开链接

Java8新特性 : 
  1. 接口新增默认方法和静态方法
  2. Optional类
  3. Lambda表达式
  4. 方法引用
  5. Stream API - 函数式操作流元素集合
  6. Date/Time API
  7. 新API和工具
  8. Nashorn , JavaScript引擎

2 . Optional类

    Java中最常见的BUG就是空指针异常 . 在Java8之前 , Google Guava引入了Optionals类来解决NullPointerException , 从而避免源码被各种null检查污染 , 以便开发者写出更加整洁的代码 . Java8也将Optional加入了官方库 . 
    Optional仅仅是一个容器 , 存放T类型的值或者null . 它提供了一些有用的接口来避免显式的null检查
常用的几个方法 : 
序号 方法 描述
1 static Optional empty(); 返回空的Optional实例
2 static Optional of(T value); 返回一个非null值得Optional实例 , 若传入参数为null , 则直接报异常
3 static Optional ofNullable(T value); 返回一个包含value的Optional实例 ,若传入参数为null , 则返回空的Optional实例
4 T get(); 如果包含值不为null , 则返回该值 , 否则抛出异常 : NoSuchElementException
5 boolean isPresent(); 如果包含值不为null , 则返回true , 否则false
6

void ifPresend(Consumer consumer);

如果包含值不为null , 则调用consumer , 否则不做任何事情
7 T orElse(T other); 如果包含值不为null , 则返回该值 , 否则返回other
8 T orElseGet(Supplier other); 如果包含值不为null , 则返回该值 , 否则触发other , 并返回other调用的结果
9 T orElseThrow(Supplier exceptionSupplier) throws X; 如果包含值不为null , 则返回该值 , 否则抛出由Supplier继承的异常
10 Optional filter( predicate); 如果包含值不为null , 且该值匹配给定的predicate , 则返回包含该值得Optional实例 , 否则返回空的Optional
11 Optional map(Function mapper); 如果包含值不为null , 则调用提供的映射方法 , 如果返回非null , 返回一个Optional实例
12 Optional flatMap(Function> mapper); 如果包含值不为null , 则返回映射方法处理之后的的Optional实例 , 否则返回空的Optional
代码Demo : 
package com.xbz.java8.optional;
​
import java.util.Optional;
​
/** @title Optional */
public class OptionalDemo1 {
    public static void main(String[] args){
        Integer i1 = null;
        Integer i2 = new Integer(10);
        Optional optional1 = Optional.ofNullable(i1);
        Optional optional2 = Optional.of(i2);
​
        System.out.println(optional1.isPresent());//判断值是否存在
        optional2.ifPresent(i -> System.out.println(i * 2));//如果值存在则执行函数(函数式编程 , 后文有说明)
        System.out.println(optional1.orElse(0));//为null则返回默认值
        System.out.println(optional2.get());//获取值
    }
}

输出结果 : 

false
20
0
10

你可能感兴趣的:(Java)