如何在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 for for循环中做这件事。有什么方法可以在一次迭代中完成吗?
答案 0 :(得分:4)
由于您尝试设置的排名与初始列表中的项目顺序相同,因此它们等于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()
以将等级作为参数,以便为lambda保留一行。