如何在IntStream或列表流中添加增量值?
List<TestInstance> testInstances = IntStream.range(0, rankedItem.size())
.mapToObj(i -> TestInstance.fromItem(rankedItem.get(i), filteredItems.containsKey(rankedItem.get(i).getItem().getId())))
.collect(Collectors.toList());
int rank = MIN_RANK_VALUE;
for (TestInstance testInstance : testInstances) {
testInstance.getRank().put(rankerName, rank++);
}
现在,我正在进行2次循环。有什么办法可以让我一次迭代吗?
最佳答案
由于您要设置的等级按初始列表中项目的顺序排列,因此它们等于MIN_RANK_VALUE
+列表中的位置,因此您可以简单地重用i
来计算等级:
List<TestInstance> testInstances = IntStream.range(0, rankedItem.size())
.mapToObj(i -> {
TestInstance t = TestInstance.fromItem(rankedItem.get(i), filteredItems.containsKey(rankedItem.get(i).getItem().getId()));
t.getRank().put(rankerName, MIN_RANK_VALUE + i);
return t;
})
.collect(Collectors.toList());
理想情况下,您可以修改
fromItem()
以将rank作为参数,以便可以为lambda保留一行。