Java 8中引入了可选(Optional)类,以避免空检查和NullPointerException问题。在Java 9中,添加了三个新方法来改善其功能。
public Stream<T> stream()
stream 方法的作用就是将 Optional 转为一个 Stream,如果该 Optional 中包含值,那么就返回包含这个值的 Stream,否则返回一个空的 Stream(Stream.empty())。
import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; public class Tester { public static void main(String[] args) { List<Optional<String>> list=Arrays.asList ( Optional.empty(), Optional.of("A"), Optional.empty(), Optional.of("B")); //过滤以打印非空值的列表 //如果可选是非空的,则获取流中的值,否则返回空 List<String> filteredList=list.stream() .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty()) .collect(Collectors.toList()); //Optional::stream 方法将返回任何一个流。 List<String> filteredListJava9=list.stream() .flatMap(Optional::stream) .collect(Collectors.toList()); System.out.println(filteredList); System.out.println(filteredListJava9); } }
输出
链接:https://www.learnfk.comhttps://www.learnfk.com/java/java9-optional-class-improvements.html
来源:LearnFk无涯教程网
[A, B] [A, B]
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
如果存在值,则使用该值执行给定的操作,否则执行给定的基于空的操作。
import java.util.Optional; public class Tester { public static void main(String[] args) { Optional<Integer> optional=Optional.of(1); optional.ifPresentOrElse( x -> System.out.println("Value: " + x),() -> System.out.println("Not Present.")); optional=Optional.empty(); optional.ifPresentOrElse( x -> System.out.println("Value: " + x),() -> System.out.println("Not Present.")); } }
输出
链接:https://www.learnfk.comhttps://www.learnfk.com/java/java9-optional-class-improvements.html
来源:LearnFk无涯教程网
Value: 1 Not Present.
public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)
如果值存在,返回 Optional 指定的值,否则返回一个预设的值。
import java.util.Optional; import java.util.function.Supplier; public class Tester { public static void main(String[] args) { Optional<String> optional1=Optional.of("Mahesh"); Supplier<Optional<String>> supplierString=() -> Optional.of("Not Present"); optional1=optional1.or( supplierString); optional1.ifPresent( x -> System.out.println("Value: " + x)); optional1=Optional.empty(); optional1=optional1.or( supplierString); optional1.ifPresent( x -> System.out.println("Value: " + x)); } }
输出
链接:https://www.learnfk.comhttps://www.learnfk.com/java/java9-optional-class-improvements.html
来源:LearnFk无涯教程网
Value: Mahesh Value: Not Present
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)