所有示例代码打包下载 : 点击打开链接
Java8新特性 :
- 接口新增默认方法和静态方法
- Optional类
- Lambda表达式
- 方法引用
- Stream API - 函数式操作流元素集合
- Date/Time API
- 新API和工具
- Nashorn , JavaScript引擎
2 . Optional类
Java中最常见的BUG就是空指针异常 . 在Java8之前 , Google Guava引入了Optionals类来解决NullPointerException , 从而避免源码被各种null检查污染 , 以便开发者写出更加整洁的代码 . Java8也将Optional加入了官方库 .
Optional仅仅是一个容器 , 存放T类型的值或者null . 它提供了一些有用的接口来避免显式的null检查
常用的几个方法 :
序号 | 方法 | 描述 |
1 | static Optional<T> empty(); | 返回空的Optional实例 |
2 | static Optional<T> of(T value); | 返回一个非null值得Optional实例 , 若传入参数为null , 则直接报异常 |
3 | static Optional<T> ofNullable(T value); | 返回一个包含value的Optional实例 ,若传入参数为null , 则返回空的Optional实例 |
4 | T get(); | 如果包含值不为null , 则返回该值 , 否则抛出异常 : NoSuchElementException |
5 | boolean isPresent(); | 如果包含值不为null , 则返回true , 否则false |
6 | void ifPresend(Consumer<? supper T> consumer); | 如果包含值不为null , 则调用consumer , 否则不做任何事情 |
7 | T orElse(T other); | 如果包含值不为null , 则返回该值 , 否则返回other |
8 | T orElseGet(Supplier<? extends T> other); | 如果包含值不为null , 则返回该值 , 否则触发other , 并返回other调用的结果 |
9 | T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X; | 如果包含值不为null , 则返回该值 , 否则抛出由Supplier继承的异常 |
10 | Optional<T> filter(<Predicate<? supper T> predicate); | 如果包含值不为null , 且该值匹配给定的predicate , 则返回包含该值得Optional实例 , 否则返回空的Optional |
11 | Optional<U> map(Function<? supper T , ? extends U> mapper); | 如果包含值不为null , 则调用提供的映射方法 , 如果返回非null , 返回一个Optional实例 |
12 | Optional<U> flatMap(Function<? supper T , Optional<U>> 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<Integer> optional1 = Optional.ofNullable(i1);
Optional<Integer> 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