Java 9
Optional.stream 已添加到JDK9。这使你无需任何帮助程序方法即可执行以下 *** 作:
Optional<Other> result = things.stream() .map(this::resolve) .flatMap(Optional::stream) .findFirst();
Java 8
是的,这是API中的一个小漏洞,因为将Optional转换为长度为零或一的Stream有点不方便。你可以这样做:
Optional<Other> result = things.stream() .map(this::resolve) .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty()) .findFirst();
但是,在flatMap中使用三元运算符比较麻烦,因此最好编写一些辅助函数来完成此 *** 作:
static <T> Stream<T> streamopt(Optional<T> opt) { if (opt.isPresent()) return Stream.of(opt.get()); else return Stream.empty();}Optional<Other> result = things.stream() .flatMap(t -> streamopt(resolve(t))) .findFirst();
在这里,我内联了对
resolve()的调用,而不是进行单独的
map()*** 作,但这只是一个问题。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)