Java 8 引入的 Optional 类,主要解决的问题是空指针异常(NullPointerException)
返回值/修饰符 | 方法 | 详细 |
---|---|---|
static Optional | empty() 返回一个空的 Optional实例。 | Optional<String> stringOptional = Optional.empty(); |
boolean | equals(Object obj) 判断对象是否相等 | Optional<UserInfo> stringOptional1 = Optional.of(user); Optional<UserInfo> stringOptional2 = Optional.of(user); boolean equals = stringOptional1.equals(stringOptional2); |
Optional | filter(Predicate<? super T> predicate) 根据条件筛选 | UserDto user=new UserDto(); user.setKeyword(“asd”); Optional<UserDto> optionalUserDto = Optional.of(user).filter(u->u.getKeyword().equals(“asd”)); 符合条件的话,就把值赋给optionalUserDto |
Optional | flatMap(Function<? super T,Optional> mapper) 如果一个值存在,应用提供的 Optional映射函数给它,返回该结果,否则返回一个空的 Optional 。 | Optional<String> stringOptional = Optional.of(user).flatMap(u -> Optional.ofNullable(u.getKeyword())); 如果u.getKyword不为空,返回一个Optional对象 |
T | get() 如果 Optional中有一个值,返回值,否则抛出 NoSuchElementException 。 | 获取Optional包含的对象,String str = stringOptional.get(); |
int | hashCode() 返回当前值的哈希码值(如果有的话),如果没有值,则返回0(零)。 | |
void | ifPresent(Consumer<? super T> consumer) 如果存在值,则使用该值调用指定的消费者,否则不执行任何操作。 | Optional<String> optionalValue = Optional.of(“Hello”); optionalValue.ifPresent(value -> { System.out.println("Value is present: " + value); // 在这里可以对 value 进行处理 }); Optional<String> emptyOptional = Optional.empty(); emptyOptional.ifPresent(value -> { // 这段代码不会执行,因为 emptyOptional 中没有值 System.out.println("Value is present: " + value); }); |
boolean | isPresent() 返回 true如果存在值,否则为 false 。 | Optional<String> optionalValue = Optional.of(“Hello”); //如果值存在 if(optionalValue.isPresent()) { } |
Optional | map(Function<? super T,? extends U> mapper) 如果存在一个值,则应用提供的映射函数,如果结果不为空,则返回一个 Optional结果的 Optional 。 | Optional<String> optionalValue = Optional.of(“Hello”); String abc = optionalValue.map(u -> u).orElse(“abc”); 直接返回optionalValue,如果空返回"abc" |
static Optional | of(T value) 返回具有 Optional的当前非空值的Optional。 | Optional<String> abc = Optional.of(“abc”); 返回一个字符串类型的Optional对象,如果为null报错NullPointerException |
static Optional | ofNullable(T value) 返回一个 Optional指定值的Optional,如果为空,则返回一个空的 Optional 。 | Optional<String> abc = Optional.ofNullable(“abc”); 返回一个字符串类型的Optional对象,可以为null |
T | orElse(T other) 返回值如果存在,否则返回 other 。 | String msg=null; String str=Optional.ofNullable(msg).orElse(“abc”); 如果msg不为null,直接返回msg,否则返回"abc" |
T | orElseGet(Supplier<? extends T> other) 返回值(如果存在),否则调用 other并返回该调用的结果。 | String msg=null; String str=Optional.ofNullable(msg).orElseGet(()->“asd”); 有值的时候返回值,如果没有值,它会执行作为参数传入的 Supplier(供应者) 函数式接口,并将返回其执行结果: |
T | orElseThrow(Supplier<? extends X> exceptionSupplier) 返回包含的值(如果存在),否则抛出由提供的供应商创建的异常。 | String str=Optional.ofNullable(msg).orElseThrow(()->new RuntimeException(“null”)); 对象为null时抛出一个异常 |
String | toString() 返回此可选的非空字符串表示,适用于调试。 |