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检查
常用的几个方法 : 
序号方法描述
1static Optional<T> empty();返回空的Optional实例
2static Optional<T> of(T value);返回一个非null值得Optional实例 , 若传入参数为null , 则直接报异常
3static Optional<T> ofNullable(T value);返回一个包含value的Optional实例 ,若传入参数为null , 则返回空的Optional实例
4T get();如果包含值不为null , 则返回该值 , 否则抛出异常 : NoSuchElementException
5boolean isPresent();如果包含值不为null , 则返回true , 否则false
6

void ifPresend(Consumer<? supper T> consumer);

如果包含值不为null , 则调用consumer , 否则不做任何事情
7T orElse(T other);如果包含值不为null , 则返回该值 , 否则返回other
8T orElseGet(Supplier<? extends T> other);如果包含值不为null , 则返回该值 , 否则触发other , 并返回other调用的结果
9T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X;如果包含值不为null , 则返回该值 , 否则抛出由Supplier继承的异常
10Optional<T> filter(<Predicate<? supper T> predicate);如果包含值不为null , 且该值匹配给定的predicate , 则返回包含该值得Optional实例 , 否则返回空的Optional
11Optional<U> map(Function<? supper T , ? extends U> mapper);如果包含值不为null , 则调用提供的映射方法 , 如果返回非null , 返回一个Optional实例
12Optional<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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值