gpt4 book ai didi

java - 使用流从 Java 8 中的文件中读取特定列,并将它们放入二维数组中

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:05:38 25 4
gpt4 key购买 nike

我有一个看起来像这样的输入文件

@id1   1.2   3.4
@id2 6.8 8.1
@id3 1.5 9.4
@id4 5.9 2.7

我只想将数字存储在二维数组中,而忘记包含 @id 的第一列。我还想只为该操作使用流。

到目前为止,我做了两种方法:

第一种方法读取输入文件并将每一行存储在一个列表中,作为一个字符串数组:

private List<String[]> savefromfile(String filePath) throws IOException {

List<String[]> rowsOfFile = new LinkedList<String[]>();
try (Stream<String> lines = Files.lines(Paths.get(filePath))) {
lines.forEach(line -> {
String rows[] = line.trim().split("\\s+");
rowsOfFile.add(rows);
});
lines.close();
}
return rowsOfFile;

第二种方法将列表作为输入,并返回一个仅包含列号的二维数组:

private double[][] storeAllID(List<String[]> rowsOfFile) {
int numberOfID = rowsOfFile.size();
double[][] allID = new double[numberOfID][2];
int i = 0;
for (String[] line : rowsOfFile) {
double id[] = new double[2];
id[0] = Double.parseDouble(line[1]);
id[1] = Double.parseDouble(line[2]);
allID[i++] = id;
}
return allID;
}

有没有办法让这段代码更有效率?我只想要一个简短的方法来读取输入文件并返回一个仅包含数字的二维数组。我认为没有必要编写 20 行代码来完成此操作。

最佳答案

savefromfile 中使用流并没有真正获得任何好处,因为您正在使用它,就像它是一个普通的 for 循环一样。为了使代码更简洁一些,您可以完全摆脱局部变量,并且不需要调用 close(),因为您已经在使用 try-with-resources。

private List<String[]> savefromfile(String filePath) throws IOException {
try (Stream<String> lines = Files.lines(Paths.get(filePath))) {
return lines
.map(line -> line.trim().split("\\s+"))
.collect(Collectors.toCollection(LinkedList::new));
}
}

我不知道你为什么要将对 double[][] 的解析分离到一个单独的方法中,因为你可以在你的流中使用映射来完成它:

    private double[][] loadFromFile(String filePath) throws IOException {
try (Stream<String> lines = Files.lines(Paths.get(filePath))) {
return lines
.map(line -> line.trim().split("\\s+"))
.map(line -> new double[] {
Double.parseDouble(line[1]),
Double.parseDouble(line[2])
})
.toArray(double[][]::new);
}
}

对于性能,您只需要自己衡量使用较低级别的数据类型和循环是否值得增加复杂性。

关于java - 使用流从 Java 8 中的文件中读取特定列,并将它们放入二维数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56733274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com