gpt4 book ai didi

java - 使用流读取文本文件 - lambda 表达式中的变量

转载 作者:行者123 更新时间:2023-12-01 09:18:56 25 4
gpt4 key购买 nike

我想读取一个文本文件,使用每行中的字符串,添加一个变量并继续。例如:我有一个包含三行的文本文件,我想在每行末尾添加一个变量,该变量每行增加 1。

为了分解所有内容,我制作了一个示例程序,但我仍然没有完全理解它。

我的文本文件“test.txt”包含三行文本“Line1”、“Line2”和“Line3”,并且我有一个名为 testNum 的整数,其值为 500,我希望在每行之后增加该整数。

我的代码如下:

String fileName = "test.txt";
int testNum = 1024;

Stream<String> readFileStream = null;
try {
readFileStream = Files.lines(Paths.get(fileName));

} catch (IOException e) {
e.printStackTrace();
}
readFileStream.forEach( line -> {
System.out.println(line+testNum);
testNum++;
});

现在我明白问题出在 lambda 表达式上。有人可以向我解释为什么我需要 lambda 表达式的局部变量并且无法访问在其外部声明的变量吗?

此外,我尝试更改代码以使用 a for every 代替,但 for every 似乎不适用于“Stream”,例如:

for(String line : readFileStream){
}

提前非常感谢。

最佳答案

通常,创建 lambda 表达式的时间和地点与执行的时间和地点不同。有时,在方法 A 中创建 lambda 表达式,并在半分钟或几小时后在方法 B 中执行。它可能在不同的线程上执行。因此,写入具有方法作用域的变量(即仅在执行方法时存在的堆栈变量)是不明智的。允许对这些变量进行读取访问,因为它们的值在创建时已“复制”到 lambda 表达式中。

就您而言,放弃流并使用 Files.lines(...)List 版本可能会更容易,因此您可以通过 for 进行迭代-循环:

List<String> lines = Files.readAllLines(Paths.get(filename));
int testNum = 500;
for(String line : lines) {
System.out.println(line + testNum);
testNum++;
}

关于java - 使用流读取文本文件 - lambda 表达式中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40300819/

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