Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用流来迭代n次,而不是使用for循环来创建n个项_Loops_Java 8_Java Stream - Fatal编程技术网

Loops 使用流来迭代n次,而不是使用for循环来创建n个项

Loops 使用流来迭代n次,而不是使用for循环来创建n个项,loops,java-8,java-stream,Loops,Java 8,Java Stream,假设我要创建n个项目。在Java 8之前,我会写: List<MyClass> list = new ArrayList<>(); for (int i = 0; i < n; i++) { list.add(new MyClass()); } 您可以使用: 如果您事先知道n,我认为使用其中一个流源创建一个已知正好有n个元素的流更为惯用。尽管有这些外观,但使用limit(10)并不一定会产生一个大小正好为10个元素的size流——它可能只有更少的元素。拥有

假设我要创建n个项目。在Java 8之前,我会写:

List<MyClass> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
    list.add(new MyClass());
}
您可以使用:

如果您事先知道n,我认为使用其中一个流源创建一个已知正好有n个元素的流更为惯用。尽管有这些外观,但使用
limit(10)
并不一定会产生一个大小正好为10个元素的
size
流——它可能只有更少的元素。拥有
大小的
流可以改进并行执行情况下的拆分

正如Sotirios Delimanolis在评论中指出的那样,你可以这样做:

List<MyClass> list = IntStream.range(0, n)
    .mapToObj(i -> new MyClass())
    .collect(toList());
List List=IntStream.range(0,n)
.mapToObj(i->new MyClass())
.collect(toList());
另一种选择是,尽管我不清楚这是否更好:

List<MyClass> list2 = Collections.nCopies(10, null).stream()
    .map(o -> new MyClass())
    .collect(toList());
List list2=Collections.nCopies(10,null).stream()
.map(o->new MyClass())
.collect(toList());
您也可以这样做:

List<MyClass> list = Arrays.asList(new MyClass[10]);
list.replaceAll(o -> new MyClass());
List List=Arrays.asList(新的MyClass[10]);
replaceAll(o->newMyClass());

但是这会导致一个固定大小的列表,尽管它是可变的。

您认为流会更具表现力/效率/有用吗?出于好奇?您可以使用
IntStream#range(0,N)
mapToObject
。为什么不使用
Stream.iterate
?@AsifMushtaq,因为每个项目的状态不依赖于前一个项目。
List<MyClass> list = IntStream.range(0, n)
    .mapToObj(i -> new MyClass())
    .collect(toList());
List<MyClass> list2 = Collections.nCopies(10, null).stream()
    .map(o -> new MyClass())
    .collect(toList());
List<MyClass> list = Arrays.asList(new MyClass[10]);
list.replaceAll(o -> new MyClass());