Lambda 表达式 —— 优雅永不过时

发布于:2025-02-11 ⋅ 阅读:(49) ⋅ 点赞:(0)

Lambda 表达式是Java 8 的重要更新,也是一个被广大开发者期待已久的新特性。Lambda 表达式支持将代码块作为方法参数,Lambda 表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数式接口)的实例。

interface Command {
    void process(int element);
}

class ProcessArray {
    public void process(int[] target, Command command) {
        for (var t : target) {
            cmd.process(t);
        }
    }

}


public class CommandTest {
    public static void main(String[] args) {
        var pa = new ProcessArray();
        int[] target = {1,2,3,4,5};

        //处理数组,具体方法交给匿名内部类
        pa.process(target, new Command() {
            public void process(int element) {
                System.out.print("数据元素的平方是:" + element * element);
            }
            
        });
    }

}

我们可以用 Lambda表达式来简化创建匿名内部类对象,所以可以优化如下:

public class CommandTest2{

    public static void main(String[] args) {
        var pa  = new ProcessArray();

        int[] array = {1,2,3,4,5};

        pa.process(array, element -> {
            System.out.print("数组元素的平方是: " + element * element);
        });
    }

}

作用:Lambda 表达式的主要作用就是代替匿名内部类的繁琐的语法。它由三部分组成。

  • 形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
  • 剪头(->)。必须通过英文中的划线和大于符号组成。
  • 代码块。如果代码块只包含一条语句,Lambda 表达式允许省略代码块的花括号,那么这条语句就不要用花括号表示语句结束。Lambda 代码块中只有一条 return 语句,甚至可以省略 return关键字。Lambda 表达式需要返回值,而它的代码块中仅有一条省略了 return 的语句,Lambda 表达式会自动返回这条语句的值。

Lambda 表达式的几种简化写法:

interface Eatable {
    void taste();
}


interface Flyable {
    void fly(String weather);

}


interface Addable {
    int add(int a, int b);
}

public class LambdaTest {

    public void eat(Eatable e) {
        System.out.print(e);
        e.taste();
    }

    public void drive(Flyable f) {
        System.out.print("我正在驾驶: " + f);
        f.fly("真是个好天气");
    }


    public void test(Addable a) {
        System.out.print("1 加 2 等于: " + a.add(1, 2));
    }

    public static void main(String[] args) {

        var lq = new LambdaTest();
        //Lambda 表达式代码块只有一条语句,可以省略花括号
        lq.eat(() -> System.out.print("西瓜的味道真不错"));

        lq.drive( weather -> {
            System.out.print("今天的天气是: " + weather);
            System.out.print("直升机飞行平稳");
        });

        //Lambda 表达式的代码块只有一条语句,可以省略花括号
        //代码块中只有一条语句,即使该表达式需要返回值,也可以省略 returen 关键字
        lq.test((a, b) -> a + b);
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到