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中修改外部状态
相关推荐
liu****24 分钟前
LangGraph-AI应用开发框架(二)
windows·langchain·大模型·工作流·langgraph
一个人旅程~2 小时前
linuxmint如何使用iphone手机上网以及如何管理iphone手机的照片和文件?需要下载哪些基础包和依赖?
linux·windows·经验分享·电脑
黑风风4 小时前
在 Windows 上设置 MAVEN_HOME 环境变量(完整指南)
java·windows·maven
seabirdssss4 小时前
Flutter 开发环境配置
android·windows·flutter·adb
码农阿豪5 小时前
中兴 F50 刷 UFI-TOOLS + cpolar:随身 WiFi 也能远程管理了
人工智能·windows·macos
Digitally5 小时前
如何在Windows、Mac和移动设备上永久删除Word文档
windows·macos·word
卡尔特斯6 小时前
Mac/Win 查看视频帧率(视频信息)
windows·mac
dyxal7 小时前
Windows 下 Git 离线安装与 VS Code 便携版集成完全指南
windows·git·elasticsearch
lifewange7 小时前
Jenkins Windows MSI 安装包完整安装教程
windows·servlet·jenkins
图灵的未来7 小时前
【WINDOWS】【HLK】Win6_4.MB.GSM.Data.TestRegistrationParams
windows