簡體   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