簡體   English   中英

如何轉換清單 <DataObject> 到地圖 <Integer, String> 使用流

[英]How to convert List<DataObject> to Map<Integer, String> using streams

我有一個對象列表。 我想做以下

for (int i = 0; i < sorted.size(); i++) {
    map.put(i, sorted.get(i).getName());
}

在Java 8 Streams API中有直接的方法嗎?

您可以執行以下操作:

Map<Integer, String> map =
        IntStream.range(0, sorted.size())
                 .boxed()
                 .collect(toMap(i -> i, i -> sorted.get(i).getName()));

這將創建一個從0到列表大小的int流,並將每個值收集到Map中。

由於您希望將元素收集到一個數據結構中,該結構本質上會跟蹤位置的大小,因此可以使用自定義收集器進行操作:

Map<Integer, String> map=sorted.stream()
    .map(x -> x.getName())
    .collect(HashMap::new, (m,s) -> m.put(m.size(), s),
        (a,b) -> { int off=a.size(); b.forEach((i,s) -> a.put(i+off, s));});

最棘手的部分是合並功能,它將僅在並行處理中使用。 它將映射的所有元素添加到其先前的映射中,但是必須使鍵偏移先前的元素數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM