Java8函数式接口Predicate用法示例详解

 更新时间:2023年07月09日 09:37:55   作者:今夜有点儿亮  
这篇文章主要为大家介绍了Java8函数式接口Predicate用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Java8函数式接口Predicate用法

在Java 8中,Predicate<T>是一个函数式接口,用于对某个类型的对象进行条件判断,返回一个布尔值。

Predicate<T>接口定义

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

Predicate<T>接口只有一个抽象方法 test,该方法接受一个泛型参数并返回一个布尔值。你可以使用Lambda表达式或方法引用来实现 Predicate<T> 接口,根据自己的需求编写条件判断代码。

Predicate<T> 简单示例

Predicate<Integer> isEven = num -> num % 2 == 0;
System.out.println(isEven.test(4)); // 输出: true
System.out.println(isEven.test(7)); // 输出: false

上述示例创建了一个用于判断一个整数是否为偶数的 Predicate<Integer> 对象 isEven。通过调用 test 方法,你可以传入一个整数,然后得到对应的布尔值结果。

Predicate<T> 接口还可以与其他函数式接口结合使用,如 filter 方法配合 Stream 使用,进行元素的过滤操作。

Predicate<T> 元素过滤

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class PredicateExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        Predicate<Integer> isEven = num -> num % 2 == 0;
        Predicate<Integer> isGreaterThan5 = num -> num > 5;
        List<Integer> filteredNumbers = numbers.stream()
                                               .filter(isEven.and(isGreaterThan5))
                                               .collect(Collectors.toList());
        System.out.println(filteredNumbers); // 输出: [6, 8, 10]
    }
}

在上述示例中,我们使用 filter 方法结合 Predicate<T> 对流中的元素进行过滤,只保留了偶数。最终将结果收集到一个新的列表中。

Predicate<T> 接口提供默认方法

如 and、or、negate,用于进行条件的组合、取反等操作。

以下是三个默认方法的说明和示例:

1. and(Predicate<? super T> other)

返回一个组合判断条件,要同时满足当前条件和传入的另一个条件。

import java.util.function.Predicate;
public class PredicateExample {
    public static void main(String[] args) {
        Predicate<Integer> isEven = num -> num % 2 == 0;
        Predicate<Integer> isGreaterThan5 = num -> num > 5;
        Predicate<Integer> isEvenAndGreaterThan5 = isEven.and(isGreaterThan5);
        System.out.println(isEvenAndGreaterThan5.test(6)); // 输出: true
        System.out.println(isEvenAndGreaterThan5.test(3)); // 输出: false
    }
}

上述示例中,我们创建了两个 Predicate<Integer> 对象 isEven 和 isGreaterThan5,分别用于判断数字是否为偶数和是否大于5。然后我们使用 and 方法将这两个条件进行逻辑与操作,生成了一个新的 Predicate<Integer> 对象 isEvenAndGreaterThan5。通过调用 test 方法,我们可以检查一个数字是否同时满足偶数和大于5的条件。

2. or(Predicate<? super T> other)

返回一个组合判断条件,满足当前条件或者传入的另一个条件即可。

import java.util.function.Predicate;
public class PredicateExample {
    public static void main(String[] args) {
        Predicate<Integer> isEven = num -> num % 2 == 0;
        Predicate<Integer> isGreaterThan5 = num -> num > 5;
        Predicate<Integer> isEvenOrGreaterThan5 = isEven.or(isGreaterThan5);
        System.out.println(isEvenOrGreaterThan5.test(4)); // 输出: true
        System.out.println(isEvenOrGreaterThan5.test(7)); // 输出: true
        System.out.println(isEvenOrGreaterThan5.test(3)); // 输出: false
    }
}

在上述示例中,我们使用 or 方法将 isEven 和 isGreaterThan5 这两个条件进行逻辑或操作,生成了一个新的 Predicate<Integer> 对象 isEvenOrGreaterThan5。通过调用 test 方法,我们可以检查一个数字是否满足偶数或者大于5的条件。

3. negate()

返回当前判断条件的取反条件。

import java.util.function.Predicate;
public class PredicateExample {
    public static void main(String[] args) {
        Predicate<Integer> isEven = num -> num % 2 == 0;
        Predicate<Integer> isNotEven = isEven.negate();
        System.out.println(isNotEven.test(3)); // 输出: true
        System.out.println(isNotEven.test(4)); // 输出: false
    }
}

在上述示例中,我们使用 negate 方法对 isEven 条件进行取反操作,生成了一个新的 Predicate<Integer> 对象 isNotEven。通过调用 test 方法,我们可以检查一个数字是否不满足偶数的条件。

以上就是Java8函数式接口Predicate用法示例详解的详细内容,更多关于Java8函数式接口Predicate的资料请关注脚本之家其它相关文章!

相关文章

  • JetBrains推出全新IDE之Fleet详解

    JetBrains推出全新IDE之Fleet详解

    当您第一次启动 Fleet 时,它会作为一个功能齐全的编辑器启动,具有语法高亮显示、简单的代码补全以及您对一个编辑器期待的所有功能,本文学习下JetBrains推出全新IDE之Fleet相关知识,感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • Java出现中文乱码问题分析及解决方案

    Java出现中文乱码问题分析及解决方案

    在Java开发中,处理中文乱码是一个常见的问题,由于字符集和编码的复杂性,开发者可能面临各种导致乱码的情况,正确地处理中文字符集对于确保应用程序的可靠性和国际化至关重要,本文给大家介绍了Java中文乱码分析及解决方案,需要的朋友可以参考下
    2024-02-02
  • Spring中的之启动过程obtainFreshBeanFactory详解

    Spring中的之启动过程obtainFreshBeanFactory详解

    这篇文章主要介绍了Spring中的之启动过程obtainFreshBeanFactory详解,在refresh时,prepareRefresh后,马上就调用了obtainFreshBeanFactory创建beanFactory以及扫描bean信息(beanDefinition),并通过BeanDefinitionRegistry注册到容器中,需要的朋友可以参考下
    2024-02-02
  • Spring容器刷新obtainFreshBeanFactory示例详解

    Spring容器刷新obtainFreshBeanFactory示例详解

    这篇文章主要为大家介绍了Spring容器刷新obtainFreshBeanFactory示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • SpringBoot+Tess4j实现牛的OCR识别工具的示例代码

    SpringBoot+Tess4j实现牛的OCR识别工具的示例代码

    这篇文章主要介绍了SpringBoot+Tess4j实现牛的OCR识别工具的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java中的HashMap为什么会产生死循环

    Java中的HashMap为什么会产生死循环

    这篇文章主要介绍了Java中的HashMap为什么会产生死循环,HashMap 死循环是一个比较常见、比较经典的问题,下面文章我们就来彻底理解死循环的原因。需要的小伙伴可以参考一下
    2022-05-05
  • Reactive Programming入门概念详解

    Reactive Programming入门概念详解

    这篇文章主要为大家介绍了Reactive Programming入门概念详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • java Apache poi 对word doc文件进行读写操作

    java Apache poi 对word doc文件进行读写操作

    这篇文章主要介绍了Apache poi 对word doc文件进行读写操作的相关资料,需要的朋友可以参考下
    2017-01-01
  • SpringBoot添加自定义拦截器的实现代码

    SpringBoot添加自定义拦截器的实现代码

    这篇文章主要介绍了SpringBoot添加自定义拦截器的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • Elasticsearch 基础介绍及索引原理分析

    Elasticsearch 基础介绍及索引原理分析

    这篇文章主要介绍了Elasticsearch 基础介绍及索引原理分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07

最新评论