Java Lambda 表达式详解从入门到实战1. Lambda 表达式基础Lambda 表达式是 Java 8 引入的函数式编程核心特性本质是匿名函数。其语法结构为(参数列表) - { 函数体 }单参数简化当参数只有一个时可省略括号x - x * x单行简化当函数体仅一行时可省略大括号(a, b) - a b类型推断编译器自动推导参数类型(s) - s.length()等价于(String s) - s.length()2. 函数式接口Lambda 的基石Lambda 必须与函数式接口配合使用即仅含一个抽象方法的接口FunctionalInterface interface Calculator { int compute(int a, int b); // 唯一抽象方法 }使用 Lambda 实现Calculator add (x, y) - x y; System.out.println(add.compute(3, 5)); // 输出 8常见函数式接口ConsumerT消费型void accept(T t)SupplierT供给型T get()FunctionT,R转换型R apply(T t)PredicateT断言型boolean test(T t)3. 方法引用Lambda 的语法糖四种方法引用简化 Lambda类型语法等价 Lambda静态方法引用类名::方法名(args) - 类名.方法名(args)实例方法引用对象::方法名(args) - 对象.方法名(args)类实例方法引用类名::方法名(obj, args) - obj.方法名(args)构造器引用类名::new(args) - new 类名(args)示例// 静态方法引用 FunctionString, Integer parser Integer::parseInt; // 实例方法引用 ListString list Arrays.asList(A, B); list.forEach(System.out::println);4. 实战应用场景场景 1集合操作ListInteger numbers Arrays.asList(1, 2, 3, 4); // 过滤偶数 ListInteger evens numbers.stream() .filter(n - n % 2 0) .collect(Collectors.toList()); // 平方映射 ListInteger squares numbers.stream() .map(x - x * x) .collect(Collectors.toList());场景 2多线程// 传统方式 new Thread(new Runnable() { Override public void run() { System.out.println(Thread running); } }).start(); // Lambda 简化 new Thread(() - System.out.println(Lambda thread)).start();场景 3事件处理JButton button new JButton(Click); button.addActionListener( event - System.out.println(Button clicked) );5. Lambda 与闭包Lambda 可捕获最终变量final 或 effectively finalint base 10; // effectively final FunctionInteger, Integer adder x - x base; System.out.println(adder.apply(5)); // 输出 156. 设计模式优化策略模式简化// 传统接口实现 class AddStrategy implements Operation { public int execute(int a, int b) { return a b; } } // Lambda 实现 Operation add (a, b) - a b; Operation multiply (a, b) - a * b;7. 性能注意事项优点减少匿名类对象创建提升代码简洁性缺点首次调用有初始化开销类加载、链接建议高频调用场景优先使用避免复杂嵌套8. 总结Lambda 表达式通过行为参数化实现了函数式编程范式语法简洁(参数) - 表达式依赖函数式接口FunctionalInterface与方法引用互补类名::方法名核心价值提升代码抽象层级使集合操作、并发处理更简洁终极示例文件处理流水线Files.lines(Paths.get(data.txt)) .filter(line - !line.startsWith(#)) // 过滤注释 .map(String::toUpperCase) // 转为大写 .sorted(Comparator.reverseOrder()) // 倒序排序 .forEach(System.out::println); // 输出