Java中的lambda表达式 - 函数式编程解决方案
Java中的lambda表达式是一种函数式编程解决方案。它允许像变量一样传递函数,并使用它们来进行操作和转换。所谓函数式编程,就是把函数作为一等公民来使用,可以像变量一样在程序中传递和使用,它强调以函数的形式去思考问题的解决方案。Java中的lambda表达式允许我们以简洁明了的方式来编写函数,从而提高程序的可读性、可维护性和可扩展性。
在Java 8之前,要编写一个匿名函数实现接口的方法,代码会比较冗长、繁琐。需要再写一个具体类实现接口,才能对接口的方法进行实现。Java 8中引入了lambda表达式,使得我们可以不需要再写一个实现类,而是通过简单的表达式实现接口的方法。
例如,以下代码用lambda表达式实现了Runnable接口的run()方法:
Runnable r = () -> {
System.out.println("Hello, world!");
};
这样,我们可以很方便地传递函数作为参数:
public static void doSomething(Runnable r) {
r.run();
}
doSomething(() -> System.out.println("Hello, world!"));
lambda表达式的语法:
(parameter1, parameter2, …) -> {
// 方法体
}
其中,参数列表在括号中,可以为空,也可以有多个参数,多个参数之间用逗号分隔。如果参数列表为空,则括号也可以省略。箭头符号"->"用来分隔参数列表与方法体。方法体可以是一个语句块,也可以是一个表达式。对于单个表达式的方法体,可以省略花括号。
lambda表达式是基于函数式接口实现的。所谓函数式接口,就是只有一个抽象方法的接口。Java 8中常见的函数式接口有Consumer、Function、Predicate、Supplier等。以下是几个常见的函数式接口用法示例:
Consumer:消费一个参数,不返回任何结果
Consumer<String> print = s -> System.out.println(s);
print.accept("Hello, world!");
Function:接收一个参数,返回一个结果
Function<Integer, Integer> multiplyTwo = i -> i * 2; System.out.println(multiplyTwo.apply(5)); // 10
Predicate:接收一个参数,返回一个boolean类型的结果
Predicate<String> startWithA = s -> s.startsWith("A");
System.out.println(startWithA.test("Apple")); // true
Supplier:不接收任何参数,返回一个结果
Supplier<Integer> getRandom = () -> (int)(Math.random() * 100); System.out.println(getRandom.get()); // 随机整数
总之,lambda表达式是Java中的一种函数式编程解决方案,它允许我们以简洁明了的方式来编写函数,提高程序的可读性、可维护性和可扩展性。通过函数式接口的实现,我们可以更加方便地使用lambda表达式来编写代码。
