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