亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

精通 Java 8 Lambda 表达式:函数式编程入门指南

Lambda 语法

(parameters) -> expression
(parameters) -> { statements; }

四大简化特性

完整示例

public class Java8Tester {
    public static void main(String[] args) {
        Java8Tester tester = new Java8Tester();

        // 1. 带类型声明
        MathOperation addition = (int a, int b) -> a + b;
        // 2. 无类型声明
        MathOperation subtraction = (a, b) -> a - b;
        // 3. 语句块需 return
        MathOperation multiplication = (int a, int b) -> { return a * b; };
        // 4. 单表达式无大括号无 return
        MathOperation division = (int a, int b) -> a / b;

        System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
        System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
        System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
        System.out.println("10 / 5 = " + tester.operate(10, 5, division));

        // 无参数、单参数简化
        GreetingService greet1 = message -> System.out.println("Hello " + message);
        GreetingService greet2 = (message) -> System.out.println("Hello " + message);
        greet1.sayMessage("Mahesh");
        greet2.sayMessage("Suresh");
    }

    interface MathOperation { int operation(int a, int b); }
    interface GreetingService { void sayMessage(String message); }

    private int operate(int a, int b, MathOperation op) {
        return op.operation(a, b);
    }
}

输出:

10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hello Mahesh
Hello Suresh

核心概念:函数式接口

Lambda 仅能赋值给 单抽象方法接口(SAM)。MathOperation 与 GreetingService 均为函数式接口。Java 8 提供 @FunctionalInterface 注解编译期校验。

变量作用域

作用域示例

public class Java8Tester {
    final static String salutation = "Hello! ";

    public static void main(String[] args) {
        GreetingService gs = message -> System.out.println(salutation + message);
        gs.sayMessage("Mahesh");
    }
    interface GreetingService { void sayMessage(String message); }
}
// 输出: Hello! Mahesh

方法引用等价形式

Lambda方法引用类型
() -> obj.method()obj::method实例方法引用
(args) -> Class.staticMethod(args)Class::staticMethod静态方法引用
(obj, args) -> obj.method(args)Class::method任意对象实例方法引用
() -> new Class()Class::new构造器引用

java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. 理解 Java 表达式、语句与代码块
  3. Java 注释:类型、用法与最佳实践
  4. 精通 Java 增强 for 循环:语法、示例与最佳实践
  5. 精通 Java 字符串:创建、方法与最佳实践
  6. 精通 Java 接口:概念、实现与最佳实践
  7. 精通 Java 匿名内部类:定义、语法与实战示例
  8. 精通 Java Try-With-Resources:自动资源管理详解
  9. Java 注解详解:类型、放置位置与实战示例
  10. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  11. 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
  12. 掌握 Java Lambda 表达式:从基础到 Stream API 实战