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

  • ->:这是分隔符,左边是参数,右边是执行的操作(把 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:"请把流里的每一行,一个接一个地拼接到前一行后面"。

相关推荐
java资料站几秒前
五、Spring AI Alibaba · Memory · Saver(短期会话)
java·spring·microsoft
xh didida3 分钟前
Linux -- 基础IO
linux·服务器·开发语言·c++
个 人 练 习 生22 分钟前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
2601_9669496531 分钟前
多市场量化策略的数据接口应该如何设计:从数据层架构到策略接入
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
坤坤子吖34 分钟前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
奋斗的阿狸_198644 分钟前
ESP32-S3 + ES7210 四通道麦克风录音上传方案
c语言·开发语言·fpga开发
夜之眷属1 小时前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
weixin199701080161 小时前
《1688图片空间API踩坑:img.upload 与 album.* 的防盗链与CDN缓存问题》(附Python源码)
开发语言·python·缓存
波加曼大王1 小时前
# vLLM不要迷信PagedAttention神话,聊聊线上藏着的内部碎片陷阱
java·架构
SL_staff1 小时前
目标健康度自检清单:开发者视角下的目标-计划-任务链路断点诊断
java·开源·github