繁体   English   中英

如何转换List <Optional<Type> &gt;进入清单 <Type>

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM