如何在Java中实现类似C++的指定大小值初始化的嵌套列表?
Java 中等价的嵌套列表/数组初始化写法
对应你给出的C++嵌套vector初始化代码,Java里可以根据需求(使用基本类型数组或包装类型列表)选择以下简洁实现:
1. 基本类型二维数组(int[][])
如果不需要使用集合类,直接用基本类型数组的话,可以结合Arrays.stream和Arrays.fill实现快速初始化:
int[][] arr = new int[rowSize][colSize]; Arrays.stream(arr).forEach(row -> Arrays.fill(row, value));
第一行先创建指定行列数的二维数组,第二行通过流遍历每一行,用Arrays.fill把整行填充为指定初始值。
2. 可变的包装类型列表(List<List<Integer>>)
如果需要使用List集合,用Stream API可以写出接近C++风格的简洁代码:
List<List<Integer>> arr = IntStream.range(0, rowSize) .mapToObj(i -> new ArrayList<>(Collections.nCopies(colSize, value))) .collect(Collectors.toList());
IntStream.range(0, rowSize)生成对应行数的流mapToObj里用Collections.nCopies(colSize, value)快速生成指定大小、全为初始值的不可变列表,再包装成ArrayList得到可变列表- 最后用
collect把所有子列表收集为外层列表
如果不需要可变列表,还可以简化成更短的版本(返回不可变列表):
List<List<Integer>> arr = IntStream.range(0, rowSize) .mapToObj(i -> Collections.nCopies(colSize, value)) .collect(Collectors.toUnmodifiableList());
内容的提问来源于stack exchange,提问作者Syed Shahabaaz Ahmed
相关产品推荐
相关产品推荐

