如何在Java 8中生成给定长度的列表?

时间:2014-05-19 23:14:18

标签: java python java-8

我想通过调用方法x次来创建一个列表(或一般的集合)。在Python中它会是这样的。

self.generated = [self.generate() for _ in range(length)]

我尝试在JDK 8中编写类似的代码。

this.generated = IntStream.range(0, length)
                          .mapToObj(n -> this.generate())
                          .collect(Collectors.toList());

它有效,但不知怎的,它感觉还不错。有没有更合适的方法呢?

2 个答案:

答案 0 :(得分:8)

我不是Python开发人员,所以我可能误解了你的例子,但从Java示例来看,你可能正在寻找像

这样的东西
Stream.generate(this::generate).limit(length).collect(Collectors.toList());

但是Brian Goetz mentioned你的方法

IntStream.range(0, length).mapToObj(i->...)

将在并行方面表现更好。

答案 1 :(得分:2)

不确定这对你有什么好处,但这是达到同样效果的一种方法:

Integer[] arr = new Integer[length];
Arrays.setAll(arr, n -> this.generate());
List<Integer> l = Arrays.asList(arr);