当前位置:首页 > JAVA教程 > JAVA基础

Java 9 改进的 Optional 类

java 9 改进的 optional 类

optional 类在 java 8 中引入,optional 类的引入很好的解决空指针异常。在 java 9 中, 添加了三个方法来改进它的功能:

  • stream()
  • ifpresentorelse()
  • or()
stream() 方法

语法

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")); //filter the list based to print non-empty values //if optional is non-empty, get the value in stream, otherwise return empty list<string> filteredlist = list.stream() .flatmap(o -> o.ispresent() ? stream.of(o.get()) : stream.empty()) .collect(collectors.tolist()); //optional::stream method will return a stream of either one //or zero element if data is present or not. list<string> filteredlistjava9 = list.stream() .flatmap(optional::stream) .collect(collectors.tolist()); system.out.println(filteredlist); system.out.println(filteredlistjava9); } }

执行输出结果为:

[a, b]
[a, b]
ifpresentorelse() 方法

语法

public void ifpresentorelse(consumer<? super t> action, runnable emptyaction)

ifpresentorelse 方法的改进就是有了 else,接受两个参数 consumer 和 runnable。

ifpresentorelse 方法的用途是,如果一个 optional 包含值,则对其包含的值调用函数 action,即 action.accept(value),这与 ifpresent 一致;与 ifpresent 方法的区别在于,ifpresentorelse 还有第二个参数 emptyaction —— 如果 optional 不包含值,那么 ifpresentorelse 便会调用 emptyaction,即 emptyaction.run()。

实例

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.")); } }

执行输出结果为:

value: 1
not present.
or() 方法

语法

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)); } }

执行输出结果为:

value: mahesh
value: not present


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!