Java函数式编程入门教程
函数式编程越来越受到程序员的重视,本篇文章为初学者提供了一份 Java 函数式编程入门教程。
1. Lambda表达式
Lambda 表达式是 Java 8 中引入的一种新特性,它允许我们以更简洁的方式来定义函数。Lambda 表达式的语法如下所示:
(parameter list) -> {lambda body}
其中,参数列表是一个用逗号分隔的参数列表,可以为空,如果只有一个参数,则可以省略括号;箭头 -> 指示了参数列表与lambda体之间的关系;lambda体可以是一个表达式或一段代码块。
示例代码:
// 1. 无参数 lambda 表达式
() -> System.out.println("Hello World!");
// 2. 有一个参数的 lambda 表达式
x -> x * x
// 3. 多个参数的 lambda 表达式
(x, y) -> x + y
// 4. 多行 lambda 表达式
x -> {
int result = x * x;
return result;
}
2. 函数式接口
函数式接口是只包含一个抽象方法的接口。Java 8 中引入了一些新的接口,如Consumer、Supplier、Function、Predicate等,它们被称为函数式接口,供Lambda 表达式使用。我们可以使用@FunctionalInterface注解来标记接口是函数式接口(此注解并不会强制要求接口只有一个抽象方法,但是编译器会检查并提示错误)。
示例代码:
// 定义一个函数式接口
@FunctionalInterface
public interface MyFunctionalInterface {
void doSomething();
}
// 使用 lambda 表达式实现上述函数式接口
MyFunctionalInterface mfi = () -> {
System.out.println("Hello, World!");
};
mfi.doSomething();
3. 方法引用
方法引用是另一种简化 Lambda 表达式的方法,它使用“::”操作符来引用方法。方法引用共有 4 种方式:
(1) 静态方法引用
示例代码:
// 静态方法的引用
Function<Integer, Integer> f = Math::abs;
System.out.println(f.apply(-123)); // 输出: 123
(2) 实例方法引用
示例代码:
// 实例方法的引用
String s = "Hello, World!";
Function<Integer, Character> f = s::charAt;
System.out.println(f.apply(6)); // 输出: W
(3) 对象的方法引用
示例代码:
// 对象的方法引用
List<String> list = Arrays.asList("a", "b", "c");
Consumer<String> c = list::add;
c.accept("d");
System.out.println(list); // 输出: [a, b, c, d]
(4) 构造函数引用
示例代码:
// 构造函数的引用
Supplier<List<String>> s = ArrayList::new;
List<String> list = s.get();
list.add("a");
list.add("b");
System.out.println(list); // 输出: [a, b]
4. 流(Stream)
流是 Java 8 中引入的一种新的处理数据集合的方式,它可以让我们以声明性的方式操作数据集合,例如过滤、映射、聚合等。流分为中间操作和终止操作,中间操作会返回一个新的流,而终止操作会将流转换为其他数据结构或生成最终结果。
示例代码:
// 过滤
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> result = list.stream()
.filter(x -> x % 2 == 0)
.collect(Collectors.toList());
System.out.println(result); // 输出: [2, 4, 6, 8, 10]
// 映射
List<String> list = Arrays.asList("apple", "orange", "banana");
List<Integer> result = list.stream()
.map(x -> x.length())
.collect(Collectors.toList());
System.out.println(result); // 输出: [5, 6, 6]
// 聚合
List<Integer> list = Arrays.asList(1, 2, 3, 4);
int sum = list.stream()
.reduce(0, (x, y) -> x + y);
System.out.println(sum); // 输出: 10
以上就是 Java 函数式编程的入门教程。在实际应用中,函数式编程可以帮助我们写出更加简洁、清晰、易于维护的代码,大大提高代码的可读性和可维护性。
