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

Java函数式编程实例:使用Predicate过滤集合

发布时间:2023-11-03 01:48:49

在Java中,函数式编程可以通过使用一些内置的函数接口来实现。其中一个常用的函数接口是Predicate接口。Predicate接口定义了一个用于判断给定输入的布尔值函数,并提供了一些用于组合多个Predicate的方法。

在这个实例中,我们将使用Predicate过滤一个整数集合,只保留其中的奇数。接下来,让我们创建一个使用Predicate过滤集合的示例程序。

首先,我们需要定义一个Predicate接口的实现类,它将判断给定的整数是否是奇数。我们可以使用Java 8中引入的lambda表达式语法来实现这个类,如下所示:

import java.util.function.Predicate;

public class OddNumberPredicate implements Predicate<Integer> {

    @Override
    public boolean test(Integer number) {
        return number % 2 != 0;
    }
}

在上述代码中,我们定义了一个实现Predicate接口的OddNumberPredicate类,并实现了其中的test方法。该方法将判断给定的整数是否是奇数,如果是奇数,则返回true,否则返回false。

接下来,我们创建一个集合,并使用Predicate过滤出其中的奇数。

import java.util.ArrayList;
import java.util.List;

public class PredicateExample {

    public static void main(String[] args) {

        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);

        Predicate<Integer> oddNumberPredicate = new OddNumberPredicate();

        List<Integer> oddNumbers = filter(numbers, oddNumberPredicate);

        System.out.println("Odd numbers: " + oddNumbers);
    }

    public static List<Integer> filter(List<Integer> numbers, Predicate<Integer> predicate) {
        List<Integer> result = new ArrayList<>();
        for (Integer number : numbers) {
            if (predicate.test(number)) {
                result.add(number);
            }
        }
        return result;
    }
}

在上述代码中,我们首先创建一个整数集合,并向其中添加一些整数。

然后,我们创建了一个OddNumberPredicate实例,它将用于判断集合中的整数是否是奇数。

接下来,我们调用filter方法,传入集合和Predicate实例,该方法将使用Predicate过滤集合,并返回符合条件的整数集合。

最后,我们输出过滤后的奇数集合。

以上代码的输出将是:

Odd numbers: [1, 3, 5]

这个示例演示了如何使用Predicate函数接口过滤集合中的元素。我们首先定义了一个实现Predicate接口的类,然后使用该类的实例来过滤集合。

除了使用lambda表达式实现Predicate接口之外,您还可以使用Java 8中的其他函数式编程功能,如Stream API来进一步简化代码。然而,使用Predicate仍然是一个很好的起点,可以帮助您了解函数式编程的基本原则。