Java Lambda实战核心是围绕函数式接口与具体场景动手练习,通过对比匿名内部类与Lambda写法、使用java.util.function内置接口、结合Stream流处理数据、尝试方法引用四步提升编码效率。

Java Lambda 表达式实战演练,核心不是背语法,而是围绕“函数式接口 + 具体场景”动手写、对比改、即时验证。重点在于把冗余代码替换成更短、更聚焦业务逻辑的写法。
从匿名内部类开始对比改
先写一个传统写法,再用 Lambda 替换,能直观看到简化效果:
- 比如启动线程:用
new Thread(new Runnable() { ... })写一遍,再改成new Thread(() -> System.out.println("运行中")) - 比如集合排序:用
new Comparator<String>() { ... }实现按长度排序,再换成(s1, s2) -> Integer.compare(s1.length(), s2.length()) - 关键点:确保替换前后行为完全一致,再观察代码行数、可读性变化
用内置函数式接口做真实小任务
不用自己定义接口,直接用 java.util.function 包里的标准接口练手:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Consumer<String>:遍历打印日志,list.forEach(s -> System.out.println("处理:" + s)) -
Predicate<Integer>:筛选偶数,numbers.stream().filter(n -> n % 2 == 0).collect(...) -
Function<String, Integer>:字符串转长度,list.stream().map(String::length).collect(...) - 每种接口只写一两行 Lambda,不追求复杂,重在熟悉参数和返回类型对应关系
结合 Stream 流做数据处理闭环
Lambda 真正发力的地方是配合 Stream,建议按“创建 → 转换 → 过滤 → 收集”四步走:
立即学习“Java免费学习笔记(深入)”;
- 准备一个
List<Person>(含 name、age 字段) - 用
stream().filter(p -> p.getAge() > 18)筛成年人 - 用
.map(p -> p.getName().toUpperCase())提取并转大写 - 最后
.collect(Collectors.toList())得到结果 - 全程只用 Lambda 写业务逻辑,不出现 for 循环或 if 判断块
尝试方法引用进一步精简
当 Lambda 只调用一个已有方法时,可升级为方法引用,更简洁:
-
str -> str.length()→String::length -
s -> System.out.println(s)→System.out::println -
() -> new ArrayList<>()→ArrayList::new - 注意区分静态方法引用、实例方法引用、构造器引用三种形式

















