Java的Lambda表达式

Lambda式是什么?

这是在Java8中引入的一种写法。
同样,在Java8中引入的Stream API是基于使用Lambda表达式的,因此学习Lambda表达式可能会有一些好处。

另外,使用lambda表达式还存在一个好处,即可以简洁地描述使用匿名类的函数式接口。

如何编写lambda表达式

Lambda表达式的基本书写方式如下。

インターフェース名 オブジェクト名 = 引数(複数受け取れる) -> 処理;

由于编译器可以进行类型推断,所以不需要指定参数的类型。
当只有一个参数时,不需要使用return或用括号()括住参数,也不需要书写代码块{}。
※修正
只有当{}中只有一条return语句时,才可以省略{}和return。
参数的数量不重要。

使用匿名类进行实现

通过使用lambda表达式,可以简洁明了地编写代码,而无需使用匿名类。

假设有一个类似以下的匿名类。


interface InterfaceTest{
    // 抽象メソッド
    public String name(String name);
}

public class Main {

    public static void main(String[] args) {

        // 匿名クラスを使った書き方
        InterfaceTest greeting = new InterfaceTest() {
            // オーバーライド
            public String name(String name) {
                return "Hello " + name;
            }
        };
        System.out.println(greeting.name("momoji"));
    }

}

在上述中,看起来好像是在创建接口的实例,但实际上是在创建一个具有匿名类的实例,该匿名类拥有该接口。

结果如下 ↓

Hello momoji

使用Lambda表达式进行实现。

我会尝试用Lambda表达式来重新改写这个。

interface InterfaceTest{
    // 抽象メソッド
    public String name(String name);
}

public class Main {

    public static void main(String[] args) {

        // ラムダ式を使った書き方
        InterfaceTest greeting = (name) -> {
            return "Hello " + name;
        };
        System.out.println(greeting.name("momoji"));
    }

}

在{}中,写下了通过greeting方法执行的处理内容。
变得更简短,更易于理解正在进行什么操作。同时,不再需要指定参数的类型。

执行结果↓

Hello momoji

使用lambda表达式以更简洁的方式编写forEach循环

在Java中,有一种与for-each循环具有相同性质的结构,称为增强型for循环。它具有对数组或列表的所有元素执行指定操作的性质。

for循环的写法。

for (データ型 変数名: listや配列){
  処理;
  ...
}

要输出列表的所有元素,请使用扩展for循环,写成以下方式。

main.java
class Main {
    public static void main (String[] args) {

            List<String> list = new ArrayList<>();
            list.add("a");
            list.add("b");
            list.add("c");

            // 拡張for文
            for(String l : list) {
                System.out.println(l);
            }

        }
}

在上面的例子中,
1. 定义一个String类型的列表”list”。
2. 使用add方法将”a”、”b”、”c”的元素逐个添加到list中。
3. 使用增强for循环逐个输出list的元素。

我正在做的事情是这样的。

执行结果如下所示。

a
b
c

使用Lambda表达式和forEach语句可以将其缩短。

class Main {
    public static void main (String[] args) {

            List<String> list = new ArrayList<>();
            list.add("a");
            list.add("b");
            list.add("c");

            // 拡張for文
            // for(String l : list) {
            //  System.out.println(l);
            // }

            // ラムダ式を使ったforEach文
            list.forEach(l -> System.out.println(l));

        }
}

执行结果↓

a
b
c

使用方法引用,可以将原本需要3行写的内容压缩到1行。

方法引用是指对方法的引用或指向。

从Java8开始,也引入了这种语法。

方法引用是指可以将方法作为参数传递的机制。

您可以无需参数调用预定义的方法。

方法引用的写法如下所示。

クラス名 :: メソッド名

在类名后面加上”::”,写上想要调用的方法名。方法名不需要加上()。

我們立即嘗試將lambda表達式與其結合起來。

// メソッド参照を使ったラムダ式
list.forEach(System.out::println);

执行结果↓

a
b
c

使用Lambda表达式和方法引用的组合技术,使得代码能够更简洁地编写。

这是一个用于处理数组、列表和其他集合的 API,可以使用易于理解的代码来实现值的聚合和基于数据的处理。
广告
将在 10 秒后关闭
bannerAds