我有一个对象列表。我想做以下
for (int i = 0; i < sorted.size(); i++) {
map.put(i, sorted.get(i).getName());
}
在Java 8流API中有没有直接的方法呢?
答案 0 :(得分:2)
您可以执行以下操作:
Map<Integer, String> map =
IntStream.range(0, sorted.size())
.boxed()
.collect(toMap(i -> i, i -> sorted.get(i).getName()));
这会创建一个int
的流,从0到列表大小,并将每个值收集到一个Map中。
答案 1 :(得分:2)
由于您希望将元素收集到数据结构中,该数据结构本质上跟踪位置的大小,因此您可以使用自定义收集器执行操作:
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));});
最棘手的部分是合并功能,它仅用于并行处理。它将地图的所有元素添加到其前一个地图中,但必须通过前面元素的数量来抵消键。