Java 8 Lambda 表达式:函数式编程入门
一、Lambda表达式的引入
Java 8引入了Lambda表达式,这是一种匿名函数的语法糖,它允许我们以更简洁的方式实现函数式编程。
二、Lambda表达式的基本语法
Lambda表达式的一般形式为:(parameters) -> expression
或 (parameters) -> { statements; }
。
三、函数式接口
Lambda表达式经常与函数式接口一起使用。函数式接口是只有一个抽象方法的接口。
@FunctionalInterface
public interface Operation {
int operate(int a, int b);
}
四、使用Lambda表达式实现函数式接口
我们可以将Lambda表达式直接赋值给函数式接口的变量。
Operation add = (a, b) -> a + b;
System.out.println(add.operate(5, 3)); // 输出 8
五、Lambda表达式与方法引用
Java 8还提供了方法引用,它允许我们引用已有方法或构造器。
// 引用现有方法
Operation subtract = (a, b) -> a - b;
// 方法引用
Operation multiply = (a, b) -> a * b;
六、Lambda表达式在集合操作中的应用
Java 8的Stream API大量使用了Lambda表达式来处理集合数据。
import cn.juwatech.collection.User;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
List<User> users = Arrays.asList(
new User("Alice", 28),
new User("Bob", 22),
new User("Charlie", 35)
);
List<String> names = users.stream()
.map(User::getName)
.collect(Collectors.toList());
七、Lambda表达式与高阶函数
高阶函数是接受其他函数作为参数或返回函数的函数。Lambda表达式使得在Java中实现高阶函数变得简单。
public class Calculator {
public interface CalcOperation {
int operate(int a, int b);
}
public int calculate(int a, int b, CalcOperation operation) {
return operation.operate(a, b);
}
public static void main(String[] args) {
Calculator calculator = new Calculator();
System.out.println(calculator.calculate(5, 3, (x, y) -> x * y));
}
}
八、Lambda表达式的限制
Lambda表达式虽然强大,但也有限制,比如它们不能包含语句块,除非使用{}
括起来。
九、Lambda表达式与异常处理
Lambda表达式内部可以抛出异常,但不能捕获它们。
public interface StringProcessor {
String process(String input) throws Exception;
}
StringProcessor processor = (in) -> {
if (in == null) throw new IllegalArgumentException("Input cannot be null");
return in.toUpperCase();
};
十、Lambda表达式与匿名类
在Java 8之前,我们通常使用匿名类来实现函数式接口。Lambda表达式提供了一种更简洁的方式。
// 匿名类实现
Operation oldStyleAdd = new Operation() {
@Override
public int operate(int a, int b) {
return a + b;
}
};
// Lambda表达式实现
Operation newStyleAdd = (a, b) -> a + b;
十一、Lambda表达式与Java 8新特性结合
Lambda表达式可以与Java 8的其他新特性,如Optional、java.util.function包中的接口等结合使用。
十二、Lambda表达式在实际开发中的应用
在实际开发中,Lambda表达式可以用来简化事件处理、定时任务、并发编程等场景。