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中修改外部状态
相关推荐
Lv_沐曦2 小时前
Windows磁盘驱动器取消黄色感叹号的方法
运维·windows·bitlocker·黄色感叹号
ITHAOGE154 小时前
下载 | Windows Server 2022官方原版ISO映像!(5月更新、标准版、数据中心版、20348.5139)
windows·科技·微软·电脑
YJlio4 小时前
CSDN AI数字营销实测体验:多平台账号一键分发到底好不好用?我做了一次完整实测
人工智能·windows·企业微信·火绒安全·系统备份·easyimagex
零号全栈寒江独钓4 小时前
c++跨平台实现日志重定向
linux·c++·windows
Crazy learner5 小时前
Windows 微软商店更新失败(错误代码 0x80004002)完整解决指南(2026最新有效)
windows·microsoft
Arenaschi6 小时前
关于GPT的版特点
java·网络·人工智能·windows·python·gpt
阿昭L6 小时前
Windows认证和安全对象的基本概念
windows·安全
周山至水数翠峰7 小时前
Windows 事件与跨线程调用
windows
techdashen7 小时前
拆开任意 Electron 应用:从 Windows 安装包到 Discord 的私有更新协议
javascript·windows·electron
PascalMing8 小时前
从零实现一款 Windows 下的 SSH 批量运维工具:LinuxSshTools 技术详解
运维·windows·ssh