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

如何在Java8中生成给定长度的列表?,java,python,java-8,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()) .col

我想通过调用一个方法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());

它能起作用,但不知怎么的,它感觉不太好。有更合适的方法吗?

我不是Python开发人员,所以我可能会误解您的示例,但从Java示例判断,您可能在寻找类似的方法

Stream.generate(this::generate).limit(length).collect(Collectors.toList());
但作为你的方法

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

同时也会表现得更好。

不确定这是否会让你感觉更好,但有一种方法可以达到同样的效果:

Integer[] arr = new Integer[length];
Arrays.setAll(arr, n -> this.generate());
List<Integer> l = Arrays.asList(arr);
Integer[]arr=新整数[长度];
Arrays.setAll(arr,n->this.generate());
列表l=数组.asList(arr);

这两个python代码快照并不等效,一个是复制相同的引用
长度
次,另一个是创建
长度
对象(假设
generate()
为每次调用创建一个新对象)。是的,如果self.generate返回引用,则为真。最初,它一直在返回浮点数,使代码段等效。尽管如此,这是我感兴趣的第一个案例。这个和面向范围的都可以。但是,面向范围的方法在并行处理中会表现得更好。如果this::generate需要一个参数呢?这是我的案子,明白了!Stream.generate(()->client.createInventory(new RandomInventory()).limit(10).collect(toSet())@我明白了,只是不确定语法。