java
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
public class ConcatenateStrings {
public static void main(String[] args) {
try {
String combination = Files.lines(Paths.get("file1.txt"))
.reduce("", (line1, line2) -> line1 + line2);
System.out.println(combination);
} catch (IOException exception) {
System.out.println("Exception Occurred: " + exception);
}
}
}
这段代码 (line1, line2) -> line1 + line2 是 Java 8 引入的 Lambda 表达式。
它在 reduce 方法中起到了"累加器"的作用。
1. 它是做什么的?
reduce 方法的作用是将流(Stream)中的所有元素合并成一个结果。
-
line1:代表目前为止已经合并好的"累积结果"。 -
line2:代表当前从文件中读入的"下一个新行"。 -
->:这是分隔符,左边是参数,右边是执行的操作(把line1和line2连起来)。创建一个包含测试内容的文件
echo -e "Hello\nWorld\nJava" > file1.txt
然后再重新编译并运行你的代码
javac concatenateString.java
java concatenateString
2. 可选的改进(更专业)
虽然 (line1, line2) -> line1 + line2 是正确的写法,但在处理大文件时,频繁进行字符串连接(+)性能会比较低。更推荐的做法是使用 Collectors.joining():
import java.util.stream.Collectors;
// ...
String combination = Files.lines(Paths.get("file1.txt"))
.collect(Collectors.joining());
总结:
此 Lambda 表达式,本质上就是告诉 Java:"请把流里的每一行,一个接一个地拼接到前一行后面"。