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

相关推荐
狼爷8 小时前
吃透 Java Function 接口,搞定 99% 的 Stream 场景
java·函数式编程
祎雪双十Gy12 小时前
从 DataX 的配置加载说起:我用 FastJson2 做了一个轻量级动态配置管理库
java·后端
小锋java123412 小时前
分享一套锋哥原创的SpringBoot4+Vue3宠物领养网站系统
java
考虑考虑16 小时前
Java实现hmacsha1加密算法
java·后端·java ee
掉鱼的猫16 小时前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·spring boot
plainGeekDev16 小时前
广播接收器 → Flow + Lifecycle
android·java·kotlin
plainGeekDev16 小时前
EventBus → SharedFlow
android·java·kotlin
带刺的坐椅17 小时前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
java·springboot·web·solon
用户37215742613517 小时前
Java 将一个 PPT 文档拆分为多个文件
java
人活一口气1 天前
Spring Boot与AIGC的完美结合:从零搭建智能内容生成平台
java·spring boot·aigc