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

相关推荐
砍材农夫1 小时前
spring|spring web|拦截器、过滤器、aop
java·spring boot·spring·spring cloud
小此方2 小时前
「C++AI大模型接入SDK」(一) API接入与本地两种方式对比、API Key获取、API报文详解与简单API的构建
开发语言·c++·人工智能
wuyk5552 小时前
Python实战项目02:学生成绩管理系统(控制台|CSV导出|完整落地)
开发语言·python
mldong8 小时前
一个 App,十三套后端:手机审批端 uni-jeeflow-app 开源了
java·架构
tqs_123459 小时前
MySQL RR隔离级别死锁|Gap间隙锁、临键锁,订单并发范围查询死锁根因方案
java
逆境不可逃9 小时前
Pi Agent 学习笔记:多个工具怎样并行执行
java
浪子明X9 小时前
十六位账本怎样发现传输差错:Internet Checksum 生活类比
开发语言
Flynt10 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet10 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
星云API技术支持10 小时前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信