欢迎访问宙启技术站
智能推送

Java函数式接口:Predicate、Function、Consumer等介绍

发布时间:2023-08-29 19:56:44

在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等函数式接口,可以更简洁、方便地编写函数式代码。