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

Rad*_*arz 5 python java java-8

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

self.generated = [self.generate() for _ in range(length)]
Run Code Online (Sandbox Code Playgroud)

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

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

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

Psh*_*emo 8

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

Stream.generate(this::generate).limit(length).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但正如Brian Goetz提到的那样

IntStream.range(0, length).mapToObj(i->...)
Run Code Online (Sandbox Code Playgroud)

将并行表现更好.

  • 这个和范围导向的都可以完成这项工作.但是,面向范围的并行性能会明显更好. (3认同)