Optional容器类的心得

Java8中可选的容器类的心得

java8使得的很多东西使得可读性变强了,通过方法的调用替代了很多if,for循环,使得语意一目了然,而且节省了编码工作。

*解决空指针异常

*优化代码解决臃肿

例子:我们调用一个方法,得到一个返回值,这个返回值可能会作为一个参数去调用另一个方法,这个时候我不能确定这个返回值是否为空,那么我就会如果(){}否则{}判断。

一个可以为空的容器对象,如果值存在则isPresent()方法则返回true,则调用get()方法方法返回该对象。

JDK 提供三个静态方法来构造一个Optional的方法

of():非空的值创建一个可选的(明确对象不为空时候)。

 ofNullable():对象可能为空也可能不为空。

empty():创建一个为空的对象。

实例后对象能调用的方法如下(可选):

   *这里主要说明可选的不同点

例:现在有个实例可选<User>用户

  • orElse-如果可选实例有值则将其返回,否则返回orElse方法传入的参数。示例:System.out.println(empty.orElse("No value present!"));//输出:No value present!                                                                                System.out.println(name.orElse("value!"));//输出:name的值
  • isPresent-如果值存在返回true,否则返回false。示例:

    if (name.isPresent()) {//在Optional实例内调用get()返回已存在的            System.out.println(name.get());//输出Sanaulla}

  • ifPresentf-如果可选实例有值则为其调用consumer,否则不做处理(onsumer类包含一个抽象方法。该抽象方法对传入的值进行处理,但没有返回值)// ifPresent方法接受lambda表达式作为参数。

    //lambda表达式对Optional的值调用consumer进行处理。                                                                          name.ifPresent((value) -> {System.out.println("The length of the value is: " + value.length());                      //此处不可以有返回值(return )})

  • get()—若Optional有值则将其返回,否则抛出NoSuchElementException。                                                                                                                             user.get();----user不为空的时候返回user的值 /若为空则抛出NoSuchElementException

  • filter()—用来检查Optional值是否满足给定条件                                                             Optional<String> scope = name.filter((value) -> value.length() > 3);System.out.println(scope .orElse("The scope is less than 3"));

  • map()—map方法通过传入的lambda表达式修改Optonal实例默认值,lambda表达式返回值会包装为Optional实例。

  •  

 

  • flatMap()—flatMap与map(Funtion)非常相似,区别在于lambda表达式的返回值。map方法的lambda表达式返回值可以是任何类型,但是返回值会包装成Optional实例。但是flatMap方法的lambda返回值总是Optional类型​​​​​​​​​​​​​​

最后一点:Optional是一个集合,只允许有一个或者0个元素,如果要将optional转换成一个List可以这么写:

List<String> optionallist = collect(optional, toList());

 

 

参考:http://www.cnblogs.com/andyfengzp/p/7243847.html

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值