Java的Lambda表达式

Java中的Lambda表达式

为了方便地创建实现了函数式接口的类的实例,这是一种语法。
换句话说,这是一种同时进行类声明和实例生成的语法。

在Java的Lambda表达式中,与之相关的是函数式接口,而这个函数式接口只包含一个抽象方法。

重点在于只需要一个选项。

从普通的类到Lambda表达式。

 

我根据这个参考学习了一下。

第一个阶段(内部类)

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        class ComparatorImpl implements Comparator<String> {
            public int compare(String s1, String s2) {
                return s1.compareTo(s2);
            }
        }
        
        Comparator<String> c = new ComparatorImpl();
        System.out.println(c.compare("ABC", "DEF"));
    }

    
}

第二阶段(匿名类)

import java.util.*;

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

/*        
        class ComparatorImpl implements Comparator<String> {
            public int compare(String s1, String s2) {
                return s1.compareTo(s2);
            }
        }
*/        
        Comparator<String> c = new Comparator<String>() {
            public int compare(String s1, String s2) {
                return s1.compareTo(s2);
            }
        };
        System.out.println(c.compare("ABC", "DEF"));
    }

    
}
Comparator<String> c = new ComparatorImpl();

右边的表达式为 new Comparator(),并在{}内写入表达式。

完成形的Lambda表达式

    1. 删除右边的Comparator()。

 

    1. 删除抽象方法compare的public int。

 

    1. 删除抽象方法compare。

 

    1. 删除抽象方法参数类型String。

 

    1. 删除抽象方法的返回。

 

    1. 删除new Comparator()。

 

    删除{和},将抽象方法的参数与处理部分用->连接起来。
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Comparator<String> c = (s1, s2) -> s1.compareTo(s2);
        System.out.println(c.compare("ABC", "DEF"));
    }
}

变得相当简单了。
通过只使用一个抽象方法,可以省略参数和返回值的类型声明。