提问者:小点点

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


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

像这样:

List <Objects> getList(int numOfElements)
{

}

共3个答案

匿名用户

如果我答对了你的问题:

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)

匿名用户

您可以使用Stream.generate(供应商

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

至少对我来说,这比使用IntStream进行迭代更具可读性,并且更清楚地说明了意图,例如Alberto Trindade Tavares建议的。

如果您想要在复杂性和内存使用方面表现更好的东西,请将结果大小传递给Stream.Collector(收集器

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

匿名用户

您在Java 8中提到的C#代码的一个等效实现(使用streams)如下(EDIT使用mapToObj,由@Eugene建议):

List <Objects> getList(int numOfElements)
{
  return IntStream.range(0, numOfElements)
                  .mapToObj(x -> new Objects())
                  .collect(Collectors.toList()); 
}