Java8新特性之Optional详解

来源:互联网 发布:机器码加密软件 编辑:程序博客网 时间:2024/05/23 11:58

Java8中对空值提供了一个操作类。Optional。下面介绍下他的方法。


静态方法:

Optional.of(T)    返回Optional包裹的对象,如果传入的参数为空,将抛出空指针异常。

Optional.ofNullable(T) 返回Optional包裹的对象,参数如果为空返回空的Optional对象。

Optional.empty() 返回空的Optional对象。

实例方法:

isPresent()  是否存在,如果值为空返回false,否则返回true

get()值存在返回值否则抛出异常

map()值存在的情况下执行自定义方法,传入参数是值,返回可以是任意类型的对象。

filter()值存在的情况下执行自定义方法,传入参数是值,返回true或false。

flatMap()与map方法基本一致,不同的是,返回类型只能是值得类型。

代码如下:


package com.example.thread;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Optional;
import java.util.Random;

public class OptaionalTest {
private static Logger logger = LoggerFactory.getLogger(OptaionalTest.class);

public static void main(String[] args) {
OptaionalTest obj = new OptaionalTest();
Optional<Integer> optional = obj.getNum();
logger.info("optional.isPresent():" + optional.isPresent());
optional.ifPresent((val1) -> {//值是否存在
logger.info("optional.ifPresent():" + optional.get());
logger.info("optional.get():" + optional.get());
String map = optional.map((intVal) -> (intVal + 1000) + "").get();//map的返回值可以是任何类型的.
logger.info("optional.map():" + map);
optional.filter((intVal) -> {//新的方法以值为参数
if (intVal > 25) {
logger.info("optional.filter()>25:" + intVal);
return true;
}
logger.info("optional.filter()<=25:" + intVal);
return false;
});
Optional<Integer> a = optional.flatMap((intVal) -> Optional.ofNullable(intVal + 1));//返回值必须是Optional类型的
});
logger.info("optional.orElse:" + optional.orElse(1));
logger.info("" + optional.orElseGet(() ->

{
logger.info("optional.orElseGet:" + -1);
return -1;
}));
}

Optional<Integer> getNum() {
Integer num = new Random().nextInt(100);
if (num < 50) {
return Optional.empty();
}
return Optional.of(num);
}
}



原创粉丝点击