java 9 改进的 optional 类
optional 类在 java 8 中引入,optional 类的引入很好的解决空指针异常。在 java 9 中, 添加了三个方法来改进它的功能:
- stream()
- ifpresentorelse()
- or()
语法
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)!