脚本宝典收集整理的这篇文章主要介绍了JAVA 8 函数式接口--Predicate,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
原文地址:JAVA 8 函数式接口--Predicate
从JDK8开始java支持函数式编程,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) && 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>10:false 10 > 10 and 10 < 20:false 10 > 10 or 10 < 20:true !(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,请注明来意。