我目前开始使用Java8。我想知道如何迭代n次for循环并将其添加到列表中:
List orderDayList = new ArrayList<>();
IntStream.rangeClosed(1, 28).forEach(value -> {
orderDayList.add(value);
});
上面的代码是有效的。这是正确的方法吗?还有其他实现方式吗?
谢谢。
直译过来就是这样的,使用 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);
List<Integer> orderDayList = Arrays.asList(IntStream.rangeClosed(1, 28).boxed().toArray(Integer[]::new));
。因为这是唯一不需要任何内部数据(数组)复制的解决方案。 - Holger