如何在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保留一行。

09-26 04:21