Java创建具有给定大小的Vector的Vector

时间:2018-07-21 14:41:33

标签: java vector 2d

我在将简单的C ++代码行转换为Java时遇到麻烦。我想声明一个具有给定尺寸的2D矢量。在C ++中,我只使用以下代码行:

std::vector<std::vector<MyObject>> treeVector(xSize, std::vector<MyObject>(ySize));

非常容易。这样做,使用类的默认构造函数在每个单元格内部创建一个空对象来创建我的Vector。这使得使用它变得容易。

我现在正在搜索和搜索stackoverflow一个小时,但是我无法提出任何建议。我能做的最好的就是创建一个完全空的2D矢量。 Java是否无法像C ++一样做到?我是否需要将向量创建为空并进行嵌套的for循环以使其达到所需的大小?

1 个答案:

答案 0 :(得分:0)

如果您想要{{1}中的List中的Lists,则可以使用Java流来做到这一点:

MyObject

内部public class MyObject { @Override public String toString() { return "MyObject"; } } import static java.util.stream.Collectors.toList; import java.util.List; import java.util.stream.Stream; public class TwoD { public static void main(String[] args) { int xSize = 7; int ySize = 11; List<List<MyObject>> treeVector = Stream.generate( () -> Stream.generate(MyObject::new).limit(ySize).collect(toList())) .limit(xSize).collect(toList()); System.out.println(treeVector); } } 创建一个新Stream.generate的列表(可能是无限的),将其限制为MyObjects的大小,并将其收集到Java ySize中。外部的List与之类似,但是它不是创建Stream.generate的{​​{1}}的列表,而是创建这些列表的列表(特别是其中的List)。

我应该补充一点,MyObjects语法是将用于生成每个列表的lambda,而xSize是对() -> ... ctor的方法引用,即用于创建MyObject::new而不是lambda。

(注意:“像lambda一样”严格来说在技术上并不准确,但这只是为了快速向来自C ++背景的人解释。)