🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
案例代码:https://gitee.com/flymini/codes01/tree/master/java_/com-learn-java01 **** java.util.Optional 类可以看做是一个容器,它可以存储任意类型的数据,包括`null`值。引入 java.util.Optional 可以很好的避免空指针异常。 <br/> 常用的方法如下: **1. `public static<T> Optional<T> empty()`创建一个空的容器** ```java Optional<String> optional01 = Optional.empty(); Optional<Integer> optional02 = Optional.empty(); ``` **2. `public static <T> Optional<T> of(T value)`创建一个存储value的容器** * 如果`value`为`null`,则报空指针异常 java.lang.NullPointerException。 ```java Optional<String> optional01 = Optional.of("zhangsan"); Optional<Integer> optional02 = Optional.of(1000); ``` **3. `public static <T> Optional<T> ofNullable(T value)`创建一个存储value的容器** * `value`可以为`null`。 ```java Optional<String> optional01 = Optional.ofNullable("zhangsan"); Optional<String> optional02 = Optional.ofNullable(null); ``` **4. `public T get()`获取容器中存储的数据** * 如果容器为空,则报空指针异常 java.lang.NullPointerException。 ```java Optional<String> optional01 = Optional.ofNullable("zhangsan"); System.out.println(optional01.get()); //zhangsan ``` **5. `public boolean equals(Object obj)`判断两个容器是否相等** * 如果两个容器为空,则不论存储的数据类型,它们总是相等的。 * 如果容器不为空,则根据它们存储的值与值的类型是否都相等来判断两个容器是否相同。 ```java Optional<String> optional01 = Optional.empty(); Optional<String> optional02 = Optional.of("zhangsan"); Optional<String> optional03 = Optional.of("1000"); Optional<Integer> optional04 = Optional.empty(); Optional<Integer> optional05 = Optional.of(1000); //空容器与空容器比较:true System.out.println(optional01.equals(optional04)); //存储相同数据类型的容器比较:false System.out.println(optional02.equals(optional03)); //存储不同数据类型的容器比较:false System.out.println(optional03.equals(optional05)); ``` **6. `public Optional<T> filter(Predicate<? super T> predicate)`过滤器** * 如果容器不为空,则返回符合条件 predicate 的容器。 * 如果容器为空,或者不符合条件 predicate 则返回空的容器。 ```java List<Integer> intList = Arrays.asList(100, 200, 300, 400); for (Integer value : intList) { Optional<Integer> optional01 = Optional.ofNullable(value); //返回容器中数据 <= 200 的容器 Optional<Integer> optional02 = optional01.filter(i -> i <= 200); System.out.println(optional02.orElse(0)); } //100 //200 //0 //0 ``` **7. `public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)`值映射** * 可以对容器中的数据做任何操作,然后返回修改数据后的容器。 ```java String numStr = "1000"; Optional<Integer> optional01 = Optional.ofNullable(numStr).flatMap(p -> Optional.ofNullable(Integer.parseInt(numStr))); Optional<String> optional02 = Optional.ofNullable(numStr).flatMap(p -> Optional.ofNullable("Hello World! " + p)); //true System.out.println(optional01.get() instanceof Integer); //Hello World! 1000 System.out.println(optional02.get()); ``` **8. `public<U> Optional<U> map(Function<? super T, ? extends U> mapper)`值映射** * 可以对容器中的数据做任何操作,然后返回修改数据后的容器。 ```java String numStr = "1000"; Optional<Integer> optional01 = Optional.ofNullable(numStr).map(p -> Integer.parseInt(p)); Optional<String> optional02 = Optional.ofNullable(numStr).map(p -> "Hello world! " + p); //true System.out.println(optional01.get() instanceof Integer); //Hello world! 1000 System.out.println(optional02.get()); ``` **9. `public void ifPresent(Consumer<? super T> consumer)`容器不为空则调用consumer** ```java //张三 Optional.ofNullable("张三").ifPresent(p -> System.out.println(p)); ``` **10. `public boolean isPresent()`判断容器是否为空** * 存储的值为`null`则为空。 ```java Optional<String> optional01 = Optional.of("zhangsan"); Optional<Integer> optional02 = Optional.empty(); Optional<Integer> optional03 = Optional.ofNullable(null); //true System.out.println(optional01.isPresent()); //false System.out.println(optional02.isPresent()); //false System.out.println(optional03.isPresent()); ``` **11. `public T orElse(T other)`容器不为空则返回容器中的数据,否则返回other** ```java Optional<String> optional01 = Optional.ofNullable("zhangsan"); Optional<String> optional02 = Optional.ofNullable(null); //zhangsan System.out.println(optional01.orElse("other")); //other System.out.println(optional02.orElse("other")); ``` **12. `public T orElseGet(Supplier<? extends T> other)`容器不为空则返回容器中的数据,否则返回调用other的结果** ```java String optional01 = Optional.ofNullable("zhangsan").orElseGet(() -> "other"); String optional02 = (String) Optional.ofNullable(null).orElseGet(() -> "other"); //zhangsan System.out.println(optional01); //other System.out.println(optional02); ``` **13. `public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X`容器中存储数据则返回该数据,否则抛出异常X** ```java String optional01 = Optional.ofNullable("zhangsan").orElseThrow(() -> new Exception("容器为空")); //zhangsan System.out.println(optional01); //抛出异常:java.lang.Exception: 容器为空 String optional02 = (String) Optional.ofNullable(null).orElseThrow(() -> new Exception("容器为空")); ``` **14. `public int hashCode()`返回容器数据的hash值** ```java Optional<String> optional01 = Optional.ofNullable("zhangsan"); Optional<String> optional02 = Optional.ofNullable(null); Optional<Boolean> optional03 = Optional.ofNullable(true); //-1432604556 System.out.println(optional01.hashCode()); //0 System.out.println(optional02.hashCode()); //1231 System.out.println(optional03.hashCode()); ``` **15. `public String toString()`返回容器数据的字符串形式** ```java Optional<String> optional01 = Optional.ofNullable("zhangsan"); Optional<String> optional02 = Optional.ofNullable(null); Optional<Boolean> optional03 = Optional.ofNullable(true); //Optional[zhangsan] System.out.println(optional01.toString()); //Optional.empty System.out.println(optional02.toString()); //Optional[true] System.out.println(optional03.toString()); ```