使用java 8 Files.lines流将文件转换为二维数组

时间:2017-10-26 18:48:30

标签: java-8 nio

我有一些矩阵数据文件:

data.txt中

0 4 8 5 7
4 0 5 9 3
8 5 0 6 2
5 9 6 0 1
7 3 2 1 0

我想从文件中读取它并使用漂亮的Files.lines流转换为二维数组。 所以我的挣扎:

int[][] arr = Files
        .lines(Paths.get("somepath/data.txt"))
        .map(item -> item
                .chars()
                .filter(i -> (char) i != ' '))
        .collect(Collectors.toList()).toArray();

实际上没有工作)(至少两个暗淡的清单)

1 个答案:

答案 0 :(得分:4)

您需要将读取的每一行解析为int数组,然后将所有这些数组收集到多维数组中。

int[][] arr = 
    Files.lines(Paths.get("somepath/data.txt"))
         .map(item -> item.chars().filter(i -> (char) i != ' ').map(Character::getNumericValue).toArray())
         .toArray(int[][]::new);

您也可以使用Pattern#splitAsStream来解析每一行:

.map(item -> Pattern.compile(" ").splitAsStream(item).mapToInt(Integer::parseInt).toArray())

请注意,还建议使用带有Files.lines的try-with-resources语句。