我有一些矩阵数据文件:
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();
实际上没有工作)(至少两个暗淡的清单)
答案 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语句。