简介
布尔值函数
观察其源码
要素察觉
- 返回值是
boolean
- 有抽象方法
test
- 还有与或非(
and、negate、or
)的默认方法方法,暗示可以两个Predicate对象组合使用 - 如果理解BiFunction,理解Predicate易如反掌
测试
public class PredicateTest {
public static void main(String[] args) {
PredicateTest test = new PredicateTest();
List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
test.printByCondition(list,l -> l%2==0);//print 偶数
System.out.println("\n"+"-----------------");
test.printByConditionNegate(list,l -> l%2==0); //print 非偶数
System.out.println("\n"+"-----------------");
test.printByConditionAnd(list,l -> l%2==0,l -> l>4); //print 偶数且大于4的数
System.out.println("\n"+"-----------------");
test.printByConditionOr(list,l -> l%2==0,l -> l<4); //print 偶数或小于4 的数
}
public void printByCondition(List<Integer> list, Predicate<Integer> predicate){
//l表示list中的某一个元素 //某个元素满足某种条件就输出
list.forEach( l -> { if (predicate.test(l)) System.out.print(l+" "); });
}
public void printByConditionNegate(List<Integer> list, Predicate<Integer> predicate){
//l表示list中的某一个元素 //某元素不满足某种条件输出
list.forEach( l -> { if (predicate.negate().test(l)) System.out.print(l+" "); });
}
public void printByConditionAnd(List<Integer> list, Predicate<Integer> predicate1,Predicate<Integer> predicate2){
//某元素同时满足两个条件
list.forEach( l -> { if (predicate1.and(predicate2).test(l)) System.out.print(l+" "); });
}
public void printByConditionOr(List<Integer> list, Predicate<Integer> predicate1,Predicate<Integer> predicate2){
//某元素满足某一个条件
list.forEach( l -> { if (predicate1.or(predicate2).test(l)) System.out.print(l+" "); });
}
}
复制代码
解释
- 一定要时刻记住Lambda表达式含义,即实现接口中的一个抽象方法,最终还是要使用
InterFaceClass.method
- 参数和返回值一个都少不了
小结
Lambda表达式作用
- 传递行为,而不仅仅是值
- 提升抽象层次
-
public void printByCondition(List<Integer> list, Predicate<Integer> predicate){ //l表示list中的某一个元素 //某个元素满足某种条件就输出 list.forEach( l -> { if (predicate.test(l)) System.out.print(l+" "); }); } 复制代码
- 单看这个方法只知道满足某个条件就输出,但具体是什么条件并不知道,所以说提升了抽象层次
-
- API重用性更好
- 更加灵活
- 同一个方法,可以随意的用lambda表达式替换和现实,所以重用性和灵活性更高
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END