【问题标题】:How to iterate for loop and add to the list in java 8?如何迭代for循环并添加到java 8中的列表?
【发布时间】:2016-02-26 05:42:01
【问题描述】:

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

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

上面的代码正在运行。这是正确的方法还是有其他方法可以实现?

谢谢

【问题讨论】:

    标签: java for-loop java-8


    【解决方案1】:

    逐字记录是这样的,带有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+tutorial

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

    嗯,从 lambda 内部修改外部世界被认为是草率的形式,但在这里对于如此简单的事情并没有真正的影响。

    另外,为了让您思考,您的 lambda 可以写为方法引用:

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

    【讨论】:

    • 非常感谢您的回答并花费您的时间。它正在使用方法参考。
    • 具有讽刺意味的是,最有效的解决方案是List&lt;Integer&gt; orderDayList = Arrays.asList(IntStream.rangeClosed(1, 28).boxed().toArray(Integer[]::new));,因为这是唯一没有任何内部数据(数组)复制的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    相关资源
    最近更新 更多