如何将矩阵转换为2D ArrayList Java

时间:2017-12-03 18:50:03

标签: java arrays arraylist

我试图接受多维矩阵作为输入,例如

1 2 3
3 1 5
1 9 7

这只是一个例子,我正在使用的那个更大,不同的输入可能是不同的行长度,行列。 在我的输入中,每行和每列的长度相等。 如何存储输入,可能是二维arraylist。我知道我必须将输入作为字符串,然后通过Integer.parseInt(string)将它们解析为整数,我知道Scanner的方法.split(" ")按空格分割输入,但是我如何分隔行以便可以提取下一行。

2 个答案:

答案 0 :(得分:2)

因为你谈到用空格分割字符串和解析整数, 您的输入似乎是矩阵数据作为字符串。 你可以先分成几行, 然后到列, 并解析整数并收集二维数组或列表列表。

String input = "1 2 3\n" +
    "3 1 5\n" +
    "1 9 7";

int[][] matrix = Arrays.stream(input.split("\n"))
    .map(s -> Arrays.stream(s.split(" "))
        .mapToInt(Integer::parseInt)
        .toArray())
    .toArray(int[][]::new);

List<List<Integer>> listOfLists = Arrays.stream(input.split("\n"))
    .map(s -> Arrays.stream(s.split(" "))
        .map(Integer::parseInt)
        .collect(Collectors.toList()))
    .collect(Collectors.toList());

以旧式的迭代方式,这是同样的事情, 如果它更容易理解:

String[] lines = input.split("\n");
int[][] matrix = new int[lines.length][];

for (int i = 0; i < lines.length; i++) {
    String[] columns = lines[i].split(" ");
    matrix[i] = new int[columns.length];
    for (int j = 0; j < columns.length; j++) {
        matrix[i][j] = Integer.parseInt(columns[j]);
    }
}

答案 1 :(得分:0)

假设你有一个读取输入线的扫描仪,这是一种方式

List<List<String>> matrix = new ArrayList<>();
while (sc.hasNextLine()) {
    matrix.add(Arrays.asList(sc.nextLine().split(" "));
}

当然,可以根据需要更改数据类型

你也可以存放一个扁平的Arraylist。使用矩阵的宽度,您可以将行和列转换为索引

matrix[row][col] == list.get(col + row*matrix.width);