Java Predicate接口的使用
阅读数:96 评论数:0
跳转到新版页面分类
python/Java
正文
@FunctionalInterface
public interface Predicate<T> {
/**
* 具体过滤操作 需要被子类实现.
* 用来处理参数T是否满足要求,可以理解为 条件A
*/
boolean test(T t);
/**
* 调用当前Predicate的test方法之后再去调用other的test方法,相当于进行两次判断
* 可理解为 条件A && 条件B
*/
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
/**
* 对当前判断进行"!"操作,即取非操作,可理解为 ! 条件A
*/
default Predicate<T> negate() {
return (t) -> !test(t);
}
/**
* 对当前判断进行"||"操作,即取或操作,可以理解为 条件A ||条件B
*/
default Predicate<T> or(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) || other.test(t);
}
/**
* 对当前操作进行"="操作,即取等操作,可以理解为 A == B
*/
static <T> Predicate<T> isEqual(Object targetRef) {
return (null == targetRef)
? Objects::isNull
: object -> targetRef.equals(object);
}
}
在Predicate接口里,除了test()为接口函数外,其他的为default方法,可以直接使用。
使用示例
public static void main(String[] args) {
/**
* 1、判断数字是否大于7
*/
//设置一个大于7的过滤条件
Predicate<Integer> predicate = x -> x > 5;
System.out.println(predicate.test(10)); //输出 true
System.out.println(predicate.test(3)); //输出 fasle
/**
* 2、大于7并且
*/
//在上面大于7的条件下,添加是偶数的条件
predicate = predicate.and(x -> x % 2 == 0);
System.out.println(predicate.test(4)); //输出 fasle
System.out.println(predicate.test(12)); //输出 true
System.out.println(predicate.test(13)); //输出 fasle
/**
* 3、add or 简化写法
*/
predicate = x -> x > 6 && x < 9;
System.out.println(predicate.test(10)); //输出 false
System.out.println(predicate.test(8)); //输出 true
}
Predicate接口除了直接使用test()方法对参数进行检测外,提供的and() , or()以及negate()方法可以用来和其它的Predicate接口组合起来使用。
相关推荐
一、概述
1、lambda允许把函数作为一个方法的参数。
二、取代某些匿名内部类
1、无参数函数的简写
如果需要创建一个线程,一种常见的写法是这样:
// JDK7 匿名内部类写法
new Threa
作用:使代码更简洁。
有些情况下,我们用lambda表达式仅仅是调用一些已经存在的方法,除了调用动作外,没有其他任何多余的动作,而通过方法引用可以使代码更简洁、更容易理解。
类型
语法
对应的L
一、概述
如果没有终端操作,中间操作是不会得到执行的(惰性求值)。
stream的使用可以将代码中大量的for循环变为简单的链式函数操作,但是需要注意性能,在数据量小的情况下二都相差不多,但是在数据
在JAVA5已经提供了Future和Callable的实现,可以用于阻塞式获取结果,如果想要异步获取结果,通常都会以轮询的方式去获取结果,如下:
<pre class="language
Supplier接口是JAVA8以后配合lambda表达式和函数式接口编程(FunctionInterface,以下简称FI)组合使用的一个接口。它最适合于表示工厂,简而言之,Supplier&
一、函数式编程和非函数编程的区别
(1)函数式编程:先考虑传入的参数,再考虑方法的实现。
(2)非函数编程:先定义好方法,再传入指定的参数
二、何为函数式接口
函数式接口(Functional Int
一、Java8简介
1、添加了函数式编程、Stream、全新的日期处理类。
2、函数编程新加了一些概念:lambda表达式、函数式接口、函数引用、默认方法、Optional类(干掉空指针)等。
3、S
一、概述
Java8引入了@Contented这个新的注解来减少伪共享(False Sharing)的发生。
二、伪共享
1、缓存行
CPU读取内存数据时并非一次只读一个字节,而是会读一段64字节长度