2 回答
![?](http://img1.sycdn.imooc.com/533e564d0001308602000200-100-100.jpg)
TA贡献1773条经验 获得超3个赞
这可以用 来完成IntStream,我也建议只使用一个Stream:
IntStream.range(0, recs.size())
.mapToObj(i -> {
Rec rec = recs.get(i);
rec.setRecordIndex(i);
return rec;
})
.parallel()
.forEach(rec -> foo(ProgressInfo, rec));
尽管不鼓励修改状态,streams而不是设置index内部状态,mapToObj返回一个新对象可能会更好。例如这样的事情:
.mapToObj(i -> {
Rec copy = new Rec(recs.get(i)); // copy constructor
copy.setRecordIndex(i);
return copy;
})
根据List您使用的实现(ArrayList比LinkedList使用index-access时性能更好),您还可以使用以下代码段。但是peek在生产代码中使用 是有点争议的。
IntStream.range(0, recs.size())
.peek(i -> recs.get(i).setRecordIndex(i))
.parallel()
.forEach(i -> foo(ProgressInfo, recs.get(i));
![?](http://img1.sycdn.imooc.com/54586453000163bd02200220-100-100.jpg)
TA贡献1829条经验 获得超7个赞
您可以使用IntStream:
IntStream.range(0, recs.size())
.forEach(i -> recs.get(i).setRecordIndex(i));
这只是使用从0to的数字流recs.size() - 1,并调用recs.get每个数字。
添加回答
举报