Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

readme.md

Optional

api

修饰符和类型 方法 描述
static <T> Optional<T> empty() 返回一个空Optional实例。
boolean equals(Object obj) 指示某个其他对象是否“等于”此对象Optional
Optional<T> filter(Predicate<? super T> predicate) 如果存在值,并且值与给定谓词匹配,则返回Optional描述该值的值,否则返回空值Optional
<U> Optional<U> flatMap(Function<? super T,? extends Optional<? extends U>> mapper) 如果存在Optional值,则返回将给定的 承载映射函数应用于该值的结果,否则返回空值Optional
T get() 如果存在值,则返回该值,否则抛出 NoSuchElementException
int hashCode() 返回值的哈希码(如果存在),否则0 (零)如果不存在值。
void ifPresent(Consumer<? super T> action) 如果存在值,则使用值执行给定操作,否则不执行任何操作。
void ifPresentOrElse(Consumer<? super T> action,Runnable emptyAction) 如果存在值,则使用值执行给定操作,否则执行给定的基于空的操作。
boolean isEmpty() 如果值不存在,则返回true,否则 false
boolean isPresent() 如果一个值存在,返回true,否则false
<U> Optional<U> map(Function<? super T,? extends U> mapper) 如果存在值,则返回将给定映射函数应用于值的Optional描述(如同ofNullable(T)),否则返回空Optional
static <T> Optional<T> of(T value) 返回Optional描述给定非null 值的内容。
static <T> Optional<T> ofNullable(T value) 返回Optional描述给定值的值,如果为非null,否则返回空值Optional
Optional<T> or(Supplier<? extends Optional<? extendsT>> supplier) 如果存在Optional值,则返回描述该值的值,否则返回Optional由赋值函数生成的值。
T orElse(T other) 如果存在值,则返回该值,否则返回 other
T orElseGet(Supplier<? extends T> supplier) 如果存在值,则返回该值,否则返回由供应函数生成的结果。
T orElseThrow() 如果存在值,则返回该值,否则抛出 NoSuchElementException
<X extendsThrowable>T orElseThrow(Supplier<? extends X> exceptionSupplier) 如果存在值,则返回该值,否则抛出异常提供函数生成的异常。
Stream<T> stream() 如果存在Stream值,则返回仅包含该值的顺序,否则返回空值Stream
String toString() 返回Optional 适合调试的非空字符串表示形式。

用法

  1. empty() 返回一个空的Optional实例
Optional<String> empty = Optional.empty();
  1. equals(Object obj) 判断当前Optional实例是否和其他实例相等
		Optional<Object> empty = Optional.empty();
        String a = new String("a");
        Optional<String> a1 = Optional.of(a);
        Optional<String> a2 = Optional.of(new String("a"));
        System.out.println(empty.equals(Optional.empty()));//都是空的Optional实例,true
        System.out.println(empty.equals(a));//a不是Optional实例,false
        System.out.println(a1.equals(a2));//Optional实例的属性相等(equal to),true
  1. filter(Predicate<? superT> predicate) 如果存在值,并且值与给定谓词匹配,则返回Optional描述该值的值,否则返回空的Optional
System.out.println(Optional.empty().filter(a -> "b".equals(a)));////Optional.empty
System.out.println(Optional.of(new String("a")).filter(a -> "b".equals(a)));//Optional.empty
System.out.println(Optional.of(new String("a")).filter(a -> "a".equals(a)));//Optional[a]
  1. flatMap(Function<? super T,? extendsOptional<? extends U>> mapper) 如果存在Optional值,则返回将给定的 承载映射函数应用于该值的结果,否则返回空的Optional
System.out.println(Optional.of("house").flatMap(s -> Optional.of(s.toLowerCase())));//Optional[HOUSE]
//Optional.of("house").flatMap(s -> s.toLowerCase());// flatMap需要自己封装成Optional
  1. get() 如果存在值,则返回该值,否则抛出 NoSuchElementException
System.out.println(Optional.of("house").get());//house
System.out.println(Optional.empty().get());//NoSuchElementException
  1. ifPresent(Consumer<? super T> action) 如果存在值,则使用值执行给定操作,否则不执行任何操作。
        Optional.empty().ifPresent(s -> System.out.println(s));
        System.out.println("--------------------------------");
        Optional.of("house").ifPresent(s -> System.out.println(s));//house
  1. isPresent() 如果存在值,返回true,否则返回false
        System.out.println(Optional.empty().isPresent());//false
        System.out.println(Optional.of("house").isPresent());//true
  1. map(Function<? super T,? extends U> mapper) 如果存在值,则返回将给定映射函数应用于值的Optional描述(如同 ofNullable(T)),否则返回空Optional。如果映射函数返回null结果,则此方法返回空Optional
System.out.println(Optional.empty().map(s -> s));//Optional.empty
System.out.println(Optional.of("house").map(s -> null));//Optional.empty
System.out.println(Optional.of("house").map(s -> s.toUpperCase()));//Optional[HOUSE]
  1. of(T value) 返回Optional描述给定非null 值的内容。如果是null,则抛出NullPointerException
System.out.println(Optional.of("house"));//Optional[house]
System.out.println(Optional.of(null));//java.lang.NullPointerException
  1. ofNullable(T value) 返回Optional描述给定值的值,如果为非null,否则返回空值Optional
System.out.println(Optional.ofNullable("house"));//Optional[house]
System.out.println(Optional.ofNullable(null));//Optional.empty
  1. orElse(T other) 如果存在值,则返回该值,否则返回 other
System.out.println(Optional.ofNullable("house").orElse("ll"));//house
System.out.println(Optional.ofNullable("").orElse("ll"));//""
System.out.println(Optional.empty().orElse("ll"));//ll
  1. orElseGet(Supplier<? extends T> other) 如果存在值,则返回该值,否则返回由供应函数生成的结果。
System.out.println(Optional.ofNullable("house").orElseGet(() -> "ll"));//house
System.out.println(Optional.ofNullable("").orElseGet(() -> "ll"));//""
System.out.println(Optional.empty().orElseGet(() -> "ll"));//ll
  1. orElseThrow(Supplier<? extends X> exceptionSupplier) 如果存在值,则返回该值,否则抛出异常提供函数生成的异常。
System.out.println(Optional.ofNullable("house").orElseThrow(NullPointerException::new));//house
System.out.println(Optional.empty().orElseThrow(NullPointerException::new));//java.lang.NullPointerException
  1. ifPresentOrElse(Consumer<? super T> action,Runnable emptyAction) 如果存在值,则使用值执行给定操作,否则执行给定的基于空的操作。
Optional.of("house").ifPresentOrElse(s -> System.out.println(s), () ->  System.out.println("null"));//house
Optional.empty().ifPresentOrElse(s -> System.out.println(s), () ->  System.out.println("null"));//null
  1. or(Supplier<? extends Optional<? extendsT>> supplier) 如果存在Optional值,则返回描述该值的值,否则返回Optional由赋值函数生成的值。
System.out.println(Optional.of("house").or(() -> Optional.of("ll")));//Optional[house]
System.out.println(Optional.empty().or(() -> Optional.of("ll")));//Optional[ll]
  1. orElseThrow() 如果存在值,则返回该值,否则抛出 NoSuchElementException
System.out.println(Optional.of("house").orElseThrow());//house
System.out.println(Optional.empty().orElseThrow());//java.util.NoSuchElementException: No value present
  1. stream() 如果存在Stream值,则返回仅包含该值的顺序,否则返回空值Stream
        List<String> list = new ArrayList<>();
        list.add("xxx1");
        list.add("xxx2");
        list.add("xxx3");

        Optional<List<String>> optional = Optional.ofNullable(list);
        //optional 可以转为stream
        optional.stream()
                .forEachOrdered(x -> x.stream().forEach(System.out::println));

        list.add("yyy1");
        Optional<List<String>> optional2 = Optional.ofNullable(list);
        //optional 扁平化
        optional2.stream()
                .flatMap(x -> x.stream())
                .forEach(System.out::println);