常用方法:
public static <T> Optional<T> of(T value);// 为Optional设值,值为空抛异常
public static <T> Optional<T> ofNullable(T value) ;// 为Optional设值,值为空不抛异常
public T get();// 如果Optional中有值,则返回值,否则抛出 NoSuchElementException
public boolean isPresent() ; // 如果存在值,返回 true,否则返回 false
public void ifPresent(Consumer<? super T> consumer) ;// 如果存在值,则使用该值调用指定的消费者,否则不执行任何操作。
public T orElse(T other) ; //如果创建的Optional中有值存在,则返回此值,否则返回一个默认值
public T orElseGet(Supplier<? extends T> other) ; //如果Optional中有值存在,则返回此值,否则返回一个由Supplier接口生成的值
实际应用:
@Test
public void test1(){
Optional<User> userOptional = Optional.of(new User("张三","123456",12));
// 一般使用,不推荐
if (userOptional.isPresent()) {
System.out.println(userOptional.get());
}
// 推荐函数式写法
userOptional.ifPresent(u-> System.out.println(u));
// school 与 user 是一对多的关系,school 里面有一个user的集合
// 若school里面的user集合不为null,输出该集合,否则输出一个空集合
User user1 = new User("张三","123456",12);
User user2 = new User("李四","123456",12);
List<User> userList = Arrays.asList(user1,user2);
School school = new School();
school.setUserList(userList); //此行可注释,使list为null
//一般写法
List<User> list = school.getUserList();
if (list!=null) {
System.out.println(list);
}else{
System.out.println(new ArrayList<User>());
}
// 函数式写法
Optional<School> optionalSchool = Optional.ofNullable(school);
System.out.println(optionalSchool.map(u -> u.getUserList()).orElse(Collections.emptyList()));
}