Java函数式接口:Predicate、Function、Consumer等介绍
在Java中,函数式编程是一种强大的编程风格,它强调将程序看作是一系列的函数,这些函数接受输入并产生输出。为了支持函数式编程,Java引入了一些函数式接口,如Predicate、Function、Consumer等。
1. Predicate:
Predicate是一个函数式接口,它定义了一个参数并返回boolean类型的方法。它通常用于筛选集合中的元素,判断一个元素是否满足特定条件。
例如,我们可以使用Predicate接口来筛选一个整数集合中的奇数:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Predicate<Integer> isOdd = n -> n % 2 != 0;
List<Integer> oddNumbers = numbers.stream()
.filter(isOdd)
.collect(Collectors.toList());
2. Function:
Function是一个函数式接口,它定义了一个参数和返回值类型的方法。它通常用于将一个值转换为另一个值。
例如,我们可以使用Function接口将一个字符串转换为它的长度:
Function<String, Integer> strLength = str -> str.length();
int length = strLength.apply("Hello");
3. Consumer:
Consumer是一个函数式接口,它定义了一个参数但没有返回值的方法。它通常用于对集合中的每个元素执行一些操作。
例如,我们可以使用Consumer接口来打印一个整数集合的每个元素:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); Consumer<Integer> printNumber = n -> System.out.println(n); numbers.forEach(printNumber);
除了Predicate、Function、Consumer之外,Java还提供了一些其他的函数式接口,如Supplier、UnaryOperator、BinaryOperator等。
4. Supplier:
Supplier是一个函数式接口,它没有参数但返回一个值。它通常用于延迟计算或生成值。
例如,我们可以使用Supplier接口来生成一个随机数:
Supplier<Integer> getRandomNumber = () -> new Random().nextInt(100); int number = getRandomNumber.get();
5. UnaryOperator:
UnaryOperator是一个函数式接口,它定义了一个参数和返回相同类型的方法。它通常用于对一个值进行一元操作。
例如,我们可以使用UnaryOperator接口对一个整数进行平方操作:
UnaryOperator<Integer> square = n -> n * n; int result = square.apply(5);
6. BinaryOperator:
BinaryOperator是一个函数式接口,它定义了两个参数和返回相同类型的方法。它通常用于对两个值进行二元操作。
例如,我们可以使用BinaryOperator接口对两个整数进行相加操作:
BinaryOperator<Integer> add = (a, b) -> a + b; int result = add.apply(5, 10);
总之,函数式接口在Java中为函数式编程提供了强大的支持。使用Predicate、Function、Consumer等函数式接口,可以更简洁、方便地编写函数式代码。
