如何在Instream或列表流中添加增量值?

时间:2017-04-18 19:38:11

标签: java list for-loop java-8 java-stream

如何在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循环中做这件事。有什么方法可以在一次迭代中完成吗?

1 个答案:

答案 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保留一行。