java打卡学习1:Lambda表达式与Stream基础

Lambda表达式基础

Lambda表达式是Java 8引入的一种简洁的匿名函数表示方式,用于简化函数式接口的实现。其基本语法为:

java 复制代码
(parameters) -> expression

java 复制代码
(parameters) -> { statements; }

常见用法示例:

java 复制代码
// 无参数
Runnable r = () -> System.out.println("Hello");
// 单参数
Consumer<String> c = s -> System.out.println(s);
// 多参数
Comparator<Integer> comp = (a, b) -> a.compareTo(b);
前端视角:Lambda 表达式(对应 JS 箭头函数)

作用:简化 "函数式接口"(只有一个抽象方法的接口)的实现,替代匿名内部类。

  • 前端对比

    --javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdownyaml

    复制代码
    // JS 箭头函数
    const add = (a, b) => a + b;
  • Java 8 实现

    --javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdownyaml

    复制代码
    // 函数式接口(JDK 自带的 Function 接口)
    import java.util.function.BiFunction;
    
    public class LambdaDemo {
        public static void main(String[] args) {
            // Lambda 表达式(对应 JS 箭头函数)
            BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
            System.out.println(add.apply(10, 20)); // 输出 30
        }
    }
  • 核心规则:参数列表 → 箭头 → 方法体(单行可省略 {},多行必须加)。

Stream API基础

Stream是Java 8提供的对集合数据进行函数式操作的API,主要特点包括:

  • 不存储数据(仅处理数据源)
  • 不修改源数据
  • 延迟执行(终端操作触发)
创建Stream
java 复制代码
List<String> list = Arrays.asList("a", "b", "c");
// 从集合创建
Stream<String> stream1 = list.stream();
// 静态方法生成
Stream<String> stream2 = Stream.of("a", "b", "c");
常用中间操作
java 复制代码
.filter(s -> s.startsWith("a"))  // 过滤
.map(String::toUpperCase)        // 转换
.sorted()                        // 排序
.distinct()                      // 去重
常用终端操作
java 复制代码
.forEach(System.out::println)    // 遍历
.collect(Collectors.toList())    // 收集为集合
.count()                         // 计数
.reduce((a,b) -> a+b)            // 归约
前端视角:Stream 流(对应 JS 数组方法)

Stream 是 Java 8 处理集合的 "神器",和 JS 的 map/filter/reduce 逻辑几乎一致,前端开发者极易上手。

  • 前端对比

    复制代码
    // JS 数组处理:过滤偶数 → 乘2 → 求和
    const arr = [1,2,3,4,5];
    const result = arr.filter(x => x%2===0).map(x => x*2).reduce((a,b) => a+b, 0);
    console.log(result); // 输出 12
  • Java 8 Stream 实现

    复制代码
    import java.util.Arrays;
    import java.util.List;
    
    public class StreamDemo {
        public static void main(String[] args) {
            List<Integer> list = Arrays.asList(1,2,3,4,5);
            // Stream 流:过滤 → 映射 → 归约(求和)
            int result = list.stream()
                            .filter(x -> x % 2 == 0) // 过滤偶数(对应 JS filter)
                            .mapToInt(x -> x * 2)    // 乘2(对应 JS map)
                            .sum();                  // 求和(对应 JS reduce 求和)
            System.out.println(result); // 输出 12
        }
    }
  • 常用 Stream 方法

    • 中间操作:filter(过滤)、map(映射)、sorted(排序)、distinct(去重);

    • 终止操作:forEach(遍历)、collect(收集结果,如转 List/Map)、sum/count(统计)、findFirst(找第一个)。

Lambda与Stream结合示例

统计字符串列表中长度大于3的元素数量:

java 复制代码
long count = list.stream()
                .filter(s -> s.length() > 3)
                .count();

将数字列表中的偶数平方后收集为新列表:

java 复制代码
List<Integer> squares = numbers.stream()
                              .filter(n -> n % 2 == 0)
                              .map(n -> n * n)
                              .collect(Collectors.toList());

注意事项

  • Lambda中使用的局部变量必须是final或等效final
  • Stream操作是单向的,不可重复使用
  • 并行流(parallelStream)需注意线程安全问题
  • 避免在Lambda中修改外部状态
相关推荐
qq_369224334 天前
Windows全系通用!ntdll.dll文件丢失、报错、闪退问题的完整排查与修复教程
windows·dll·dll修复·dll丢失·dll错误
阿米亚波4 天前
【Windows】QEMU 启动 openEuler aarch64/arm64 架构系统 + 离线软件源
linux·windows·经验分享·笔记·架构·arm
caimouse4 天前
Reactos 第 10 章 网络操作 — 10.3.1 NIC驱动
网络·windows
初圣魔门首席弟子4 天前
Node.js 详细介绍(知识库版)
windows·qt·node.js·知识库
CHENG-JustDoIt4 天前
AI工具 | 爆火开源项目Odysseus AI 工作台:从项目介绍、部署情况及其使用等多方位分析指南(含详细步骤)
大数据·人工智能·windows·python·ai·开源·github
kingbal4 天前
Windows:flutter环境搭建
windows·flutter
未若君雅裁4 天前
Python 数据容器详解,list、tuple、str、set、dict 到底怎么选
windows·python·list
CodeKwang4 天前
Windows 环境 OCCT 8.0 编译构建及与 Qt6 项目集成
windows·qt·opencascade
我是伪码农4 天前
小兔鲜1-25
linux·服务器·windows
vx-Biye_Design4 天前
springboot安阳地区研学旅游服务小程序-计算机毕业设计源码12785
java·vue.js·windows·spring boot·tomcat·maven·mybatis