Java函数-函数式接口与Lambda表达式入门
Java 8引入了函数式编程的概念,其中有两个重要的概念是函数式接口和Lambda表达式。函数式接口是只有一个抽象方法的接口,Lambda表达式是一种简洁的函数申明形式。
函数式接口可以由Java中的任意接口来担任,只要该接口只有一个抽象方法即可。例如,我们可以使用Runnable接口来定义一个函数式接口:
@FunctionalInterface
interface MyRunnable {
void run();
}
注解@FunctionalInterface用于显式标识该接口是一个函数式接口,虽然不是必需的,但是有助于我们在编译期间发现错误。
Lambda表达式是一种匿名函数的简洁写法。它由参数列表、箭头运算符和函数体组成。例如,下面是一个使用Lambda表达式实现的函数式接口的例子:
MyRunnable myRunnable = () -> System.out.println("Hello, world!");
Lambda表达式的箭头左边是参数列表,如果参数列表为空,可以写成一对空括号。箭头右边是函数体,可以是一条语句也可以是多条语句。
Lambda表达式可以用来替代匿名内部类的实例化。例如,通过实现Comparator接口来排序字符串列表:
List<String> list = Arrays.asList("apple", "banana", "orange");
Collections.sort(list, (s1, s2) -> s1.compareTo(s2));
上面的例子中,Lambda表达式取代了匿名内部类的实例化,使代码变得更加简洁。
Lambda表达式可以捕获外部变量,即可以访问外部作用域中的局部变量。例如,下面的例子中,Lambda表达式可以访问count变量:
int count = 0; Runnable runnable = () -> System.out.println(count);
Lambda表达式可以不仅仅是单行代码,还可以是多行代码。在多行代码的情况下,需要使用花括号将代码块包围起来,并使用return语句返回结果。例如,下面的例子中,Lambda表达式返回两个数的和:
MySum sum = (a, b) -> {
int result = a + b;
return result;
};
Lambda表达式可以与函数接口一同使用,以便提供一个接口的具体实现。
函数式接口和Lambda表达式是Java 8中引入的重要概念,它们使得函数式编程在Java中更加易于使用。函数式接口使得定义函数接口变得简单,Lambda表达式使得实现函数接口变得简洁。这些新特性使得Java中的函数式编程更加强大和灵活。
