JAVA8(一) Optional类

@[toc](Java8 Optional类)

### 1、为什么有Optional类

- 避免出现空指针异常,使代码更具有可读性.

### 2、Optional类的描述

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

### 3、Optuonal类使用总结

|方法|方法描述|

|-|----|

|of(T t)|t为null时报空指针异常,否则创建一个Op实例|

|empty()|创建一个空的Op实例|

|ofNullable(T t)|t不为null时创建Op实例,否则创建空的Op实例|

|get()|如果Op有值将其返回,否则抛出NoSuchElementException|

|isPresent()|判断是否包涵值,返回boolean值|

|orElse(T t)|如果调用对象包涵值,返回该值,否则返回t|

|orElseGet(Supplier s)|如果调用对象包涵值,返回该值,否则返回s获取的值|

|map(Function f)|如果有值对其处理,并返回处理后的Op,否则返回Op.empty()|

|flatMap(Function mapper)|与map类似,要求返回值必须是Optional|

|filter(Predicate p)|如果有值且满足断言条件返回该值得Op对象,否则返回空的Op对象

==of(T t)==

```java

//工厂方法创建Optional实例

Optional<String> name = Optional.of("optional");

//传入参数为null,抛出NullPointerException.

Optional<String> someNull = Optional.of(null); 

```

==empty()==

```java

//Optional.empty() : 创建一个空的 Optional 实例

Optional<Object> empty = Optional.empty();

```

==ofNullable(T t)==

```java

//创建一个值为'null'的Optional

Optional empty = Optional.ofNullable(null);

```

==get()==

```java

//执行下面的代码会输出:No value present

try {  

//在空的Optional实例上调用get(),抛出NoSuchElementException    

    System.out.println(empty.get());

    } catch (NoSuchElementException ex) {    

     System.out.println(ex.getMessage());}

```

==isPresent()==

```java

//isPresent() : 判断是否包含值

Optional<Employee> employees = Optional.ofNullable(null);

if(employees.isPresent()){ System.out.println("不为空");

}else{ System.out.println("为空");

}

```

==ofElse(T t)==

```java

//如果值不为null,orElse方法返回Optional实例的值。

//如果为null,返回传入的消息。

//输出:There is no value!

System.out.println(empty.orElse("There is no value !"));

//输出:optional

System.out.println(name.orElse("There is some value!"));

```

==orElseGet(Supplier s)==

```java

//orElseGet与orElse方法类似,区别在于orElse传入的是默认值

//orElseGet可以接受一个lambda表达式生成默认值。

//输出:Default Value

System.out.println(empty.orElseGet(() -> "Default Value"));

//输出:optional

System.out.println(name.orElseGet(() -> "Default Value"));

```

==orElseThrow(Supplier s)==

```java

try {

//orElseThrow与orElse方法类似。与返回默认值不同  

//orElseThrow会抛出lambda表达式或方法生成的异常   

empty.orElseThrow(ValueAbsentException::new);

} catch (Throwable e) {

//输出: No value present in the Optional instance      

    System.out.println(e.getMessage());

}

//ValueAbsentException定义class 

ValueAbsentException extends Throwable {      

public ValueAbsentException() {            

super();      

}    

public ValueAbsentException(String msg) {            

super(msg);      

}      

@Override      

public String getMessage() { return "No value present in the Optional instance"; }}

```

==map(Function f)==

```java

//map方法执行传入的lambda表达式参数对Optional实例的值进行修改。

//为lambda表达式的返回值创建新的Optional实例作为map方法的返回值。

Optional<String> upperName = name.map((value) -> value.toUpperCase());

System.out.println(upperName.orElse("No value found"));

```

==flatMap(Function mapper)==

```java

//flatMap与map(Function)非常类似,区别在于传入方法的lambda表达式的返回类型。

//map方法中的lambda表达式返回值可以是任意类型,在map函数返回之前会包装为Optional。 

//但flatMap方法中的lambda表达式返回值必须是Optionl实例。 

upperName = name.flatMap((value) -> Optional.of(value.toUpperCase()));

System.out.println(upperName.orElse("No value found"));

//输出OPTIONAL

```

==filter(Predicate p)==

```java

//filter方法检查给定的Option值是否满足某些条件。

//如果满足则返回同一个Option实例,否则返回空Optional。

Optional<String> longName = name.filter((value) -> value.length() > 6);

System.out.println(longName.orElse("The name is less than 6 characters"));

//输出optional

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42242792

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值