![](/img/trans.png)
[英]Using Java 8 streams, how to transform Map<String, Map<String, List<Person>>> to Map<Integer, Map<String, Integer>>?
[英]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.