[英]How to convert List<Optional<Type>> into List<Type>
我已将Map
中的值提取到List
但得到了List<Optional<TXN_PMTxnHistory_rb>>
,我想将其转换为List<TXN_PMTxnHistory_rb>
。
我的代码:
List<Optional<TXN_PMTxnHistory_rb>> listHistory_rb6 =
listHistory_rb5.values()
.stream()
.collect(Collectors.toList());
我想获得一个List<TXN_PMTxnHistory_rb>
。
过滤掉所有空值并使用map
获取非空值:
List<TXN_PMTxnHistory_rb> listHistory_rb6 =
listHistory_rb5.values()
.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
可以在Optional
s流上使用一个名为flatMap
的方法来执行此操作,该方法将删除任何“空” Optional
s。
List<TXN_PMTxnHistory_rb> listHistory_rb6 =
listHistory_rb5.values()
.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList());
Flatmap实际上执行两件事 - “映射”和“展平”。 在映射阶段,它调用您传入的任何方法并期望返回一个新流 - 在这种情况下,原始List
每个Optional
都将成为包含1或0值的Stream
。
然后, 展平阶段将创建一个包含所有映射的Stream
的结果的新Stream
。 因此,如果List
有2个可Optional
,一个为空,一个为full,则生成的Stream
将包含来自第一个映射Stream
0个元素和来自第二个的1个值。
另一种选择是获取所有值,然后过滤掉nulls
:
List<TXN_PMTxnHistory_rb> listHistory_rb6 =
listHistory_rb5.values().stream()
.map(opt -> opt.orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toList());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.