使用 StreamEx 从 Stream 中删除空的 Optionals
Remove empty Optionals from Stream using StreamEx
我正在寻找一种使用 StreamEx 库仅流式传输非空 Optional
条目的优雅方法。或者标准库,如果可能的话。
目前我正在使用以下相当冗长的方法:
List<Optional<String>> list =
Arrays.asList(Optional.of("A"), Optional.empty(), Optional.of("B"));
List<String> nonEmpty =
StreamEx.of(list).filter(Optional::isPresent).map(Optional::get).toList();
我基本上是在寻找类似 StreamEx 的 nonNull
方法的东西,但是对于 Optional
.
嗯,这个已经添加了,但只在 java-9:
list.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList());
Stuart Marks 有一个后向端口 here
对 StreamEx 问题积压的一些研究揭示了 issue 49,它提供了一种更简短的方法并包含关于该主题的讨论:
List<String> nonEmpty = StreamEx.of(list).flatMap(StreamEx::of).toList();
更短,但是否更具可读性还有待讨论。
我正在寻找一种使用 StreamEx 库仅流式传输非空 Optional
条目的优雅方法。或者标准库,如果可能的话。
目前我正在使用以下相当冗长的方法:
List<Optional<String>> list =
Arrays.asList(Optional.of("A"), Optional.empty(), Optional.of("B"));
List<String> nonEmpty =
StreamEx.of(list).filter(Optional::isPresent).map(Optional::get).toList();
我基本上是在寻找类似 StreamEx 的 nonNull
方法的东西,但是对于 Optional
.
嗯,这个已经添加了,但只在 java-9:
list.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList());
Stuart Marks 有一个后向端口 here
对 StreamEx 问题积压的一些研究揭示了 issue 49,它提供了一种更简短的方法并包含关于该主题的讨论:
List<String> nonEmpty = StreamEx.of(list).flatMap(StreamEx::of).toList();
更短,但是否更具可读性还有待讨论。