在我以前的文章中,我写了关于Function接口的内容 ,它是java.util.package的一部分。 我还提到了Predicate接口,它是同一包的一部分,在这篇文章中,我将向您展示如何使用Predicate和Consumer接口。 让我们看一下Javadoc for Predicate接口:

确定输入对象是否符合某些条件。

在该接口中声明/定义了5种方法(您一定想知道这是一个功能性接口 ,如果是,那么您必须在继续之前阅读此方法),这些方法是:

//Returns a predicate which evaluates to true only if this predicate
//and the provided predicate both evaluate to true.
and(Predicate<? super T> p)//Returns a predicate which negates the result of this predicate.
negate()//Returns a predicate which evaluates to true if either
//this predicate or the provided predicate evaluates to true
or(Predicate<? super T> p)//Returns true if the input object matches some criteria
test(T t)//Returns a predicate that evaluates to true if both or neither
//of the component predicates evaluate to true
xor(Predicate<? super T> p)

除test(T t)以外的所有方法均为默认方法,而test(T t)为抽象方法。 提供此抽象方法实现的一种方法是使用匿名内部类,另一种方法是使用lambda表达式 。

用于消费者接口的Javadoc指出:

接受单个输入参数且不返回结果的操作。 与大多数其他功能接口不同,消费者应该通过副作用来操作。

此接口中有2种方法,其中只有一种是抽象的,而该抽象方法是:accept(T t),它接受输入并且不返回任何结果。 为了解释有关谓词和消费者界面的更多信息,我们考虑一个带有名称,等级和要支付费用的学生班。 每个学生都有一定的折扣,折扣取决于学生的成绩。

class Student{String firstName;String lastName;Double grade;Double feeDiscount = 0.0;Double baseFee = 20000.0;public Student(String firstName, String lastName,Double grade) {this.firstName = firstName;this.lastName = lastName;this.grade = grade;}public void printFee(){Double newFee = baseFee - ((baseFee*feeDiscount)/100);System.out.println("The fee after discount: "+newFee);}
}

然后创建一个接受Student对象,谓词实现和Consumer实现的方法。 如果您不熟悉Function界面,则应该花几分钟阅读此内容 。 此方法使用谓词来确定是否必须更新学生对费用的折扣,然后使用Consumer实现来更新折扣。

public class PreidcateConsumerDemo {public static Student updateStudentFee(Student student,Predicate<Student> predicate,Consumer<Student> consumer){//Use the predicate to decide when to update the discount.if ( predicate.test(student)){//Use the consumer to update the discount value.consumer.accept(student);}return student;}}

谓词和使用者中的测试方法和接受方法都分别接受声明的泛型类型的参数。 两者之间的区别在于谓词使用参数来做出某些决定并返回布尔值,而Consumer使用参数来更改其某些值。 让我们看一下如何调用updateStudentFee方法:

public static void main(String[] args) {Student student1 = new Student("Ashok","Kumar", 9.5);student1 = updateStudentFee(student1,//Lambda expression for Predicate interfacestudent -> student.grade > 8.5,//Lambda expression for Consumer inerfacestudent -> student.feeDiscount = 30.0);student1.printFee();Student student2 = new Student("Rajat","Verma", 8.0);student2 = updateStudentFee(student2,student -> student.grade >= 8,student -> student.feeDiscount = 20.0);student2.printFee();}

在这篇文章中,我通过示例解释了如何利用谓词和使用者接口,它们是Java 8中引入的java.util.function包的一部分。

参考:来自JCG合作伙伴 Mohamed Sanaulla的Java 8中java.util.function包中的谓词和使用者接口,来自Experiences Unlimited博客。

翻译自: https://www.javacodegeeks.com/2013/04/predicate-and-consumer-interface-in-java-util-function-package-in-java-8.html

Java 8中java.util.function包中的谓词和使用者接口相关推荐

  1. java.util接口_Java 8中java.util.function包中的谓词和使用者接口

    java.util接口 在上一篇文章中,我写了关于Function接口的内容 ,它是java.util.package的一部分. 我还提到了Predicate接口,它是同一包的一部分,在这篇文章中,我 ...

  2. java.util接口_函数接口– Java 8中java.util.function包中的函数接口

    java.util接口 我以前写过有关功能接口及其用法的文章. 如果您正在探索要成为Java 8一部分的API,尤其是那些支持lambda表达式的API,您会发现很少的接口,例如Function,Su ...

  3. 函数接口– Java 8中java.util.function包中的函数接口

    我以前写过有关功能接口及其用法的文章. 如果您正在探索要成为Java 8一部分的API,尤其是那些支持lambda表达式的API,您会发现很少的接口,例如Function,Supplier,Consu ...

  4. 深入学习Java8 Lambda (default method, lambda, function reference, java.util.function 包)

    Java 8 Lambda .MethodReference.function包 多年前,学校讲述C#时,就已经知道有Lambda,也惊喜于它的方便,将函数式编程方式和面向对象式编程基于一身.此外在使 ...

  5. java.util.function包

    目录 Supplier 参数个数扩展 参数类型扩展 特殊变形 Function,r> 参数个数扩展 参数类型扩展 特殊变形 Consumer 参数个数扩展 参数类型扩展 特殊变形 Predica ...

  6. Eclipse中要导出jar包中引用了第三方jar包怎么办

    Eclipse中要导出jar包中引用了第三方jar包怎么办 (2009-07-20 15:28:44) 转载▼ 标签: it 分类: Eclipse     今天做个小的java程序,想要先将其导出成 ...

  7. Function接口 – Java8中java.util.function包下的函数式接口

    作者:   Mohamed Sanaulla  译者: 李璟(jlee381344197@gmail.com) 早先我写了一篇<函数式接口>,探讨了Java8中函数式接口的用法.如果你正在 ...

  8. java 扫描类_Java扫描指定包中所有类

    1. 扫描类 import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.n ...

  9. java原生和SpringBoot读取jar包中MANIFEST.MF的方式

    我们经常看到java的一些jar包META-INF目录下包含一个MANIFEST.MF文件,里面包含一些版本信息,标题,实现组织,很多第三方的jar包还会自定义一个属性. 本文讲解如何读取jar包中M ...

最新文章

  1. 【Python入门】Python字符串的45个方法详解
  2. 一个已经存在 10 年,却被严重低估的库
  3. slidingmenu能否实现菜单页在内容页上方,而不是把内容页挤到一边去????...
  4. 【HDU - 3328】Flipper (栈模拟)
  5. LeetCode 99. 恢复二叉搜索树(中序遍历)
  6. 初学java小白的疑惑梳理
  7. MOS管正确选择的步骤
  8. Oracle11g限制ip访问数据库,Oracle11g设置IP访问限制
  9. cmp linux 命令,比较文件Linux基本命令:cmp
  10. C# 生成word文档(NPOI.XWPF)
  11. javascript css 合并压缩SquishIt – The Friendly ASP.NET JavaScript and CSS Squisher
  12. php自动发卡程序8.0_「亲测」2020新版个人自动发卡源码 php完整个人发卡网搭建源码...
  13. 2020蓝桥杯省赛模拟赛
  14. 快速入门丨篇四:如何进行运动控制器与触摸屏通讯?
  15. 3、搭建rtmp视频推流服务器
  16. 计算机找不到ie浏览器,IE浏览器不见了怎么办?找回IE浏览器的方法
  17. 设计一个Triangle类继承自GeometricObject类
  18. 注销、重启、关机快捷键命令
  19. 炼数成金 Oracle EBS R12 DBA培训视频教程
  20. ThingsBoard 添加指定客户首页展示仪表板功能

热门文章

  1. linux软件可以在所有发行版运行吗,Linux通用的跨发行版的3大软件包管理器
  2. 车提示检测轮胎气压_水淹车估价中心_辽宁中车检
  3. gpu超算算法_超算安装GPU-based软件 (以pytorch为例)
  4. es6 dsl与sql对比
  5. (转)ThreadPoolExecutor最佳实践--如何选择队列
  6. 本地缓存防止缓存击穿_防止缓存爆炸的快速提示
  7. 应行家算法_一些行家技巧和窍门
  8. java 多线程性能_Java中多线程的性能比较
  9. 具有InlfuxDB的Spring Boot和Micrometer第3部分:Servlet和JDBC
  10. jetty嵌入式容器_嵌入式Jetty和Apache CXF:借助Spring Security来保护REST服务