JAVA 8 函数式接口--Predicate

发布时间:2019-11-19 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了JAVA 8 函数式接口--Predicate脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

原文地址:JAVA 8 函数式接口--Predicate
从JDK8开始java支持函数式编程,JDK也提供了几个常用的函数式接口,这篇主要介绍Predicate接口。
文本介绍的顺序依次为:

  • 码介绍
  • 使用示例
  • JDK内PRedicate的使用举例
  • 扩展类介绍

源码介绍

package java.util.function;  import java.util.Objects;  /**  * 提供了对输入的参数进行断定并返回boolean类型能力的函数式接口  *  */ @FunctionalInterface public interface Predicate<T> {      /**      * 基于输入的参数进行断定,并返回boolean类型      *      */     boolean test(T t);      /**      * 逻辑“与”判断,接收一个Predicate类型参数。      * 优先对自身逻辑进行断定,若断定为true则进行参数other断定;否则不对other断定      * 若断定期间发生异常,停止所有断定并将异常传递给调用者      */     default Predicate<T> and(Predicate<? super T> other) {         Objects.requireNonNull(other);         return (t) -> test(t) &amp;& other.test(t);     }      /**      * 对断定的结果取“非”值      */     default Predicate<T> negate() {         return (t) -> !test(t);     }      /**      * 逻辑“或”判断,接收一个Predicate类型参数。      * 优先对自身逻辑进行断定,若断定为true则不对参数other断定;否则对other断定      * 若断定期间发生异常,停止所有断定并将异常传递给调用者      */     default Predicate<T> or(Predicate<? super T> other) {         Objects.requireNonNull(other);         return (t) -> test(t) || other.test(t);     }      /**      * 可设置一个参数,并对后续所有调用test传入数与该参数进行equals比较      */     static <T> Predicate<T> isEqual(Object targetRef) {         return (null == targetRef)                 ? Objects::isNull                 : object -> targetRef.equals(object);     } }

下面来看一下具体的使用方法。

使用示例

package jdk8.function;  import java.util.function.Predicate;  public class PredicateDemo {      public static void main(String[] args) {         PredicateDemo predicateDemo = new PredicateDemo();         predicateDemo.simpleDemo();     }      public void simpleDemo(){         Predicate<Integer> predicate = i -> i > 10;         Predicate<Integer> other = i -> i < 20;          Integer param = 10;         String str = "demo";          System.out.println(param + ">10:" + predicate.test(param));         System.out.println(param + " > 10 and " + param + " < 20:" + predicate.and(other).test(111));         System.out.println(param + " > 10 or " + param + " < 20:" + predicate.or(other).test(30));         System.out.println("!("+param+" > 10):" + predicate.negate().test(0));         System.out.println("demo.equal("+str+"):" + Predicate.isEqual("demo").test("demo"));     }  } 

下面是输出结果:

10>10false 10 > 10 and 10 < 20false 10 > 10 or 10 < 20true !(10 > 10):true demo.equal(demo):true

个人觉得这个函数式接口是一个非常好用的工具,可以实现一些校验器、过滤器的功能。

JDK内Predicate的使用举例

Collection接口提供了一个默认的方法removeif,使用者可以根据自定义的filter对集合内的元素进行移除。代码如下:

default boolean removeIf(Predicate<? super E> filter) {         Objects.requireNonNull(filter);         boolean removed = false;         final Iterator<E> each = iterator();         while (each.hasNext()) {             if (filter.test(each.next())) {                 each.remove();                 removed = true;             }         }         return removed;     }

Predicate扩展接口

类名 描述
BiPredicate 提供了接收2个参数的断定功能
DoublePredicate 提供了接收double类型参数的断定功能
IntPredicate 提供了接收int数的断定功能
LongPredicate 提供了接收long的断定功能

脚本宝典总结

以上是脚本宝典为你收集整理的JAVA 8 函数式接口--Predicate全部内容,希望文章能够帮你解决JAVA 8 函数式接口--Predicate所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。