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中修改外部状态
相关推荐
优选资源分享3 小时前
zTasker v2.3.8 便携版丨 Windows 自动化任务工具
运维·windows·自动化
CQU_JIAKE5 小时前
3.23[Q]s
开发语言·windows·python
WJX_KOI6 小时前
OpenClaw 纯 Windows 环境源码部署教程(含修改脚本配置)
人工智能·windows
ulias2127 小时前
函数栈帧的创建和销毁
开发语言·数据结构·c++·windows·算法
攻城狮在此7 小时前
Windows电脑如何关闭不必要启动项,提升开机速度与运行流畅度
windows
ljh5746491198 小时前
linux xargs 命令
linux·运维·windows
开开心心就好8 小时前
电子教材下载工具,支持多链接批量下载
windows·随机森林·计算机视觉·pdf·计算机外设·逻辑回归·excel
Coding的叶子8 小时前
Windows 下 如何安全地安装 龙虾(OpenClaw)
windows·安全·ai·openclaw·龙虾·龙虾安装·龙虾实验室
babytiger9 小时前
Windows 11 下格式化 Linux 分区 TF 卡(DiskPart 完整教程)
linux·运维·windows