我正在尝试创建一个包含 n 个元素的对象列表。我正在尝试以最 java 8 的方式尽可能做到这一点。类似于这里对 c# 提出的问题:创建 N 个对象并将它们添加到列表中
像这样:
List <Objects> getList(int numOfElements)
{
}
如果我答对了你的问题:
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());
}