如何在Java 8中迭代for循环并将元素添加到列表中?

3

我目前开始使用Java8。我想知道如何迭代n次for循环并将其添加到列表中:

List orderDayList = new ArrayList<>();
        IntStream.rangeClosed(1, 28).forEach(value -> {
            orderDayList.add(value);
        });

上面的代码是有效的。这是正确的方法吗?还有其他实现方式吗?
谢谢。
1个回答

5

直译过来就是这样的,使用 Collector

List<Integer> orderDayList =
    IntStream.rangeClosed(1, 28)
             .boxed()
             .collect(Collectors.toCollection(ArrayList::new));

如果我们不关心 List 的类型,这里可以稍微简短一些:
List<Integer> orderDayList =
    IntStream.rangeClosed(1, 28)
             .boxed()
             .collect(Collectors.toList());

请查看Collectors+教程

这是正确的方法吗[...]?

嗯,从lambda内部修改外部世界被认为是不规范的形式,但对于这么简单的事情,实际上并没有什么区别。

另外,仅供参考,您的lambda可以写成一个方法引用:

IntStream.rangeClosed(1, 28)
         .forEach(orderDayList::add);

非常感谢您的回答和花费时间。它使用方法引用正在工作。 - soorapadman
3
具有讽刺意味的是,最有效的解决方案是 List<Integer> orderDayList = Arrays.asList(IntStream.rangeClosed(1, 28).boxed().toArray(Integer[]::new));。因为这是唯一不需要任何内部数据(数组)复制的解决方案。 - Holger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接