什么是opitonal
opitonal类就是Java提供的为了解决大家平时判断对象是否为空用的,用 null!=obj 这样的方式存在的判断,Null Pointer Exception 空指针异常,同时opitonal的存在可以让代码更加简单,可读性跟高,代码写起来更高效.
在了解opitonal之前需要了解四大内置核心函数式接口 https://www.cnblogs.com/lwjQAQ/p/16321930.html
opitonal使用举例: Stream.findOne; Stream.findAll
optional提供三个获取实例的方法。
public static<T> Optional<T> empty() { Optional<T> t = (Optional<T>) EMPTY; return t; } public static <T> Optional<T> of(T value) { return new Optional<>(value); } public static <T> Optional<T> ofNullable(T value) { return value == null ? empty() : of(value); }
optional容器类的常用方法
@Test public void test() { UserInfo userInfo = null; Optional<UserInfo> userInfoOptional = Optional.ofNullable(userInfo); System.out.println(userInfoOptional.isPresent()); if (userInfoOptional.isPresent()) { System.out.println(userInfoOptional.get()); } // orElse返回默认值 UserInfo ofElseUser = userInfoOptional.orElse(new UserInfo("罗文杰", 18, "12345")); System.out.println(ofElseUser); // 使用Supplier函数返回默认值 UserInfo orElseGetUser = userInfoOptional.orElseGet(() -> new UserInfo("罗文杰", 18, "12345")); System.out.println(orElseGetUser); userInfo = new UserInfo("罗文杰", 18, "12345"); userInfoOptional = Optional.ofNullable(userInfo); // map 重新构造返回值 Optional<Object> optionalMap = userInfoOptional.map(item -> { item.setAge(24); return item; }); if (optionalMap.isPresent()) { System.out.println(optionalMap.get()); } // filter过滤 Optional<UserInfo> userInfoOptionalFilter = userInfoOptional.filter(item -> item.getAge() <= 18); if (userInfoOptionalFilter.isPresent()) { System.out.println(userInfoOptionalFilter.get()); } } @Test public void test2() { UserInfo userInfo = null; Optional<UserInfo> userInfoOptional = Optional.of(userInfo); if (userInfoOptional.isPresent()) { System.out.println(userInfoOptional.get()); } } @Test public void test3() { Optional<UserInfo> userInfoOptional = Optional.empty(); if (userInfoOptional.isPresent()) { System.out.println(userInfoOptional.get()); } } }