初试 lambda 表达式

代码示例:

// 传统的匿名内部类
Runnable runnable1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello World!");
    }
};

// 使用 Lambda 表达式
Runnable runnable2 = () -> System.out.println("Hello World!");

可以看到,lambda 表达式表示的代码更加简洁了。

函数式编程

一种编程思想特点。

lambda 表达式使用前提

必须是接口的匿名内部类,接口中只能有一个抽象方法。

对于只有一个抽象方法的抽象接口,可以加上 @FunctionalInterface 标签。编译器会确认该接口是否只有一个抽象方法。若出现多个方法则编译报错。

——正是因为你的接口只有一个抽象方法,所以你的 lambda 表达式才可以省略掉重写方法名。

示例

原代码:

public class test {
    public static void main(String[] args) {
        method(new Swim() {
            @Override
            public void swimming() {
                System.out.println("正在游泳");
            }
        });
    }

    public static void method(Swim s) {
        s.swimming();
    }

    public interface Swim {
        public abstract void swimming();
    }
}

改写后:

public class test {
    public static void main(String[] args) {
        method(() -> {
                System.out.println("正在游泳");
            }
        );
    }

    public static void method(Swim s) {
        s.swimming();
    }

    public interface Swim {
        public abstract void swimming();
    }
}

lambda 表达式省略

原则:省略内容可推导。

  1. 参数类型可以省略不写
  2. 如果只有一个参数,不仅参数类型,() 也可以省略不写
  3. 如果表达式的方法体只有一行,大括号,分号,return 都可以省略不写。但必须同时省略。

依照如上原则,我们的代码还可以省略成下面的形式:

method(() -> System.out.println("Swimming"));

小练习

将一个数组内的字符串按照从短到长的顺序排列。

Arrays.sort(arr, ) 方法有两个形参,一个是传入数组,一个是规则模式。我们这里使用比较模式。

import java.util.Arrays;
import java.util.Comparator;

public class Lambda {
    public static void main(String[] args) {
        String[] arr = {"a", "aaaa", "aaa", "aa"};

        // 完整的匿名内部类写法:
        // Arrays.sort(arr, new Comparator<String>(){
        //     @Override
        //     public int compare(String o1, String o2) {
        //         return o1.length() - o2.length();
        //     }
        // });

        Arrays.sort(arr, (o1, o2) -> o1.length() - o2.length());
        
        System.out.println(Arrays.toString(arr));
    }
}

  • reward_image1
此作者没有提供个人介绍。
最后更新于 2026-05-02