java8的新特性[5](仅为个人看法的读书笔记)

全篇简介

这一篇讲一讲Java8中的 Optional 类,它是一个针对空指针异常处理的很好的容器。它可以存放NULL值或是相对类型的数值,所以我们就不用显式进行空值检测。

类的声明

public final class Optional<T>
extends Object

类的方法

当然这个类具有10+种不同效果的方法,我们先逐一介绍再附上代码重点介绍几个常用的方法。

1. of(T value)

为非null的值创建一个Optional。创建对象时传入的参数不能为null。如果传入参数为null,则抛出NullPointerException 。

Optional<Integer> number = Optional.of(10);
Optional<Integer> someNull = Optional.of(null);
//这种情况下会抛出异常NullPointerException

2. ofNullable(T value)

为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。可以接受参数为null的情况

Optional empty = Optional.ofNullable(null);
//在ofNullable(T value)方法中是可以传入null的

3. empty()

返回一个空的 Optional实例。

Optional<Integer> number = Optional.empty();
//这个很简单就是返回一个空的Optional实例对象

4. isPresent()

如果值存在返回true,否则返回false。

if (number.isPresent()) {
    System.out.println(number.get());
}

5. get()

如果Optional有值则将其返回,否则抛出NoSuchElementException。

6. ifPresent(Consumer<? super T> consumer)

如果存在值,则使用该值调用指定的Consumer类,否则不执行任何操作。

7. orElse(T other)

如果有值则将其返回,否则返回指定的其它值other。如果Optional实例有值则将其返回,否则返回orElse方法传入的参数

System.out.println(empty.orElse("There is no value present!"));
//因为empty为null,所以结果很明显是There is no value present!
System.out.println(number.orElse("There is some value!"));
//因为number不为空,所以结果应该为10

8. orElseGet(Supplier<? extends T> other)

orElseGet与orElse方法类似,区别在于得到的默认值。orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值。

9. orElseThrow(Supplier<? extends X> exceptionSupplier)

如果有值则将其返回,否则抛出supplier接口创建的异常。

10. map(Function<? super T,? extends U> mapper)

如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。 map方法的mapping函数返回值可以是任何类型T

11. flatMap(Function<? super T,Optional< U >> mapper)

如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装。flatMap方法的mapping函数必须是Optional。

12. filter(Predicate<? super T> predicate)

filter个方法通过传入限定条件对Optional实例的值进行过滤。文档描述:如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional

13. equals(Object obj)

判断其他对象是否等于 Optional。

    System.out.println(number.equals(empty));
    //由于empty为空,显然返回false

14. hashCode()

返回存在值的哈希码,如果值不存在 返回 0。

15. toString()

返回一个Optional的非空字符串,用来调试

实例

package test;
import java.util.Optional;
 
public class t2 {
   public static void main(String args[]){
   
      Integer value1 = null;
      Integer value2 = new Integer(10);
        
      Optional<Integer> a = Optional.ofNullable(value1);
        
      Optional<Integer> b = Optional.of(value2);
      System.out.println("第一个参数值存在: " + a.isPresent());
      System.out.println("第二个参数值存在: " + b.isPresent());
      Integer value11 = a.orElse(new Integer(0));
      Integer value22 = b.get();
      System.out.println(value11+value22);
   }
}

输出结果:

第一个参数值存在: false
第二个参数值存在: true
10

总结

这应该是我这段时间做的最后一篇Java8新特性的读书笔记,后续可能会看需求更新,但是就这几篇写下来,总让我感觉我越学越学不会Java了,太难了我。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值