`(line1, line2) -> line1 + line2` 此Lambda 表达式的理解

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:代表当前从文件中读入的"下一个新行"。

  • ->:这是分隔符,左边是参数,右边是执行的操作(把 line1line2 连起来)。

    创建一个包含测试内容的文件

    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:"请把流里的每一行,一个接一个地拼接到前一行后面"。

相关推荐
Tisfy18 分钟前
LeetCode 1927.求和游戏:抵消+看最值
java·leetcode·游戏·题解·博弈论
「QT(C++)开发工程师」6 小时前
C++ 11 常用for循环
开发语言·c++
我还记得那天6 小时前
0 初识C++
开发语言·c++
FfHUCisI6 小时前
Go 编译过程全景
开发语言·后端·golang
FfHUCisI6 小时前
Golang 语法分析与 AST:Parser 与 go/ast
开发语言·后端·golang
秋饼7 小时前
JDK 27 企业级 AI 服务落地实战:G1 默认、紧凑对象头、后量子 TLS 与 JFR 脱敏全解析
java·ai·技术分享·后端开发
卓怡学长7 小时前
w176基于SpringBoot的医院管理系统
java·spring boot·spring·maven·intellij-idea
lemon_sjdk7 小时前
ObjectProperty
java·开发语言·算法
大模型码小白7 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring