我已将值从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>
。
答案 0 :(得分:7)
过滤掉所有空值,然后使用map
获得非空值:
List<TXN_PMTxnHistory_rb> listHistory_rb6 =
listHistory_rb5.values()
.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
答案 1 :(得分:2)
可以在flatMap
s流中使用称为Optional
的方法来执行此操作,该方法将删除所有“空” Optional
s。
List<TXN_PMTxnHistory_rb> listHistory_rb6 =
listHistory_rb5.values()
.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList());
Flatmap本质上执行两件事-“映射”和“扁平化”。在 mapping 阶段,它调用您传入的任何方法,并期望返回新的流-在这种情况下,原始Optional
中的每个List
都将变成{{1 }}包含1或0个值。
展平阶段将创建一个新的Stream
,其中包含所有映射的Stream
的结果。因此,如果您的Stream
中有2个Optional
项目,一个为空,一个为满,则结果List
将包含来自第一个映射的Stream
的0个元素和1个值从第二个开始。
答案 2 :(得分:1)
另一种选择是获取所有值,然后过滤掉nulls
:
List<TXN_PMTxnHistory_rb> listHistory_rb6 =
listHistory_rb5.values().stream()
.map(opt -> opt.orElse(null))
.filter(Objects::nonNull)
.collect(Collectors.toList());