如何创建包含 N 个对象的列表?

2022-09-01 16:20:58

我正在尝试创建具有n个元素的对象列表。我试图以最java 8的方式做到这一点。类似于这里为c#提出的问题:创建N个对象并将它们添加到列表中

像这样:

List <Objects> getList(int numOfElements)
{

}

答案 1

如果我答对了你的问题:

List <Object> getList(int numOfElements){
     return IntStream.range(0, numOfElements)
              .mapToObj(Object::new) // or x -> new Object(x).. or any other constructor 
              .collect(Collectors.toList()); 
}

如果你想要相同的对象 n 次:

Collections.nCopies(n, T)

答案 2

您可以与对构造函数的引用结合使用,然后用于指定应构造的构造数:Stream.generate(Supplier<T>)Stream.limit(long)

Stream.generate(Objects::new).limit(numOfElements).collect(Collectors.toList());    

至少对我来说,这比使用for迭代更具有可读性,并且比使用for迭代更清晰地说明了意图,例如Alberto Trindade Tavares所建议的那样IntStream

如果您想要在复杂性和内存使用方面表现更好的内容,请将结果大小传递给 :Stream.collect(Collector<? super T,A,R>)

Stream.generate(Objects::new).limit(numOfElements).collect(Collectors.toCollection(() -> new ArrayList<>(numOfElements)));