Optional
来将可选字符串列表转换为字符串列表。 Collectors
)?List<Optional<String>> stringsMaybe = Arrays.asList(Optional.of("Hi"),
Optional.empty(), Optional.of(" there!"));
List<String> strings = stringsMaybe
.stream()
.filter(Optional::isPresent)
.collect(Collectors.mapping(Optional::get, Collectors.toList()));
#1 楼
在流上使用.map
而不是Collectors.mapping
更为习惯: 从Java 9开始,
Optional
提供了stream
方法,使您可以执行.flatMap(Optional::stream)
而不是.filter(...).map(...)
。#2 楼
如果使用rxJava,则可以执行以下操作:Flux<Optional<String>> maybeStrings = Flux.just(
Optional.of("Hi"),
Optional.empty(),
Optional.of(" there!"));
Flux<String> strings = maybeStrings.handle((maybeString, synchronousSink) ->
maybeString.ifPresent(synchronousSink::next));
评论
\ $ \ begingroup \ $
嗨,在CodeReview上,可以解释为什么您的解决方案比当前代码提供更好的替代方法:)
\ $ \ endgroup \ $
–IEatBagels
18年11月27日在21:12
\ $ \ begingroup \ $
您要使用我的示例而不是选择的答案的唯一原因是,如果您使用的是rxJava Flux,而不是Java 8 Stream。从技术上讲,这不能回答问题,但是搜索此示例的人可能仍会从此摘录中受益。
\ $ \ endgroup \ $
–医生参数
18年11月28日在19:54