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

相关推荐
如竟没有火炬43 分钟前
去除重复字母——贪心+单调栈
开发语言·数据结构·python·算法·leetcode·深度优先
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第49题】【JVM篇】第9题:什么是双亲委派机制?介绍一下运作过程。?
java·开发语言·jvm
码农-阿杰1 小时前
Java 线程中断机制深度解析:从 API 到底层 C++ 实现
java·开发语言·c++
Brilliantwxx1 小时前
【C++】priority_queue以及 仿函数 的学习
开发语言·c++·笔记·学习·算法
风味蘑菇干1 小时前
斗地主案例
java·数据结构·算法
码农学院1 小时前
itextsharp .net中如何设置两个表格的间距设为0,取网站的域名,协议、端口、当前站点目录的地址
开发语言·c#·.net
宠..1 小时前
VS Code 修改 C++ 标准同时修改错误检测标准
java·linux·开发语言·javascript·c++·python·qt
WL_Aurora1 小时前
Java Scanner输入陷阱深度解析
java·开发语言
一只大袋鼠1 小时前
SpringMVC 框架中的拦截器
java·springmvc·javaweb·拦截器