如何在Java8中生成给定长度的列表?
我想通过调用一个方法x次来创建一个列表(或集合)。在Python中是这样的如何在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
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())@我明白了,只是不确定语法。