1 packageorg.htsg;2

3 importjava.util.ArrayList;4 importjava.util.List;5 importjava.util.Objects;6 importjava.util.function.Predicate;7

8 /**

9 *@authorHTSG10 */

11 public classPredicateTest {12 public static voidmain(String[] args) {13 //添加十个学生

14 List studentList = new ArrayList<>(10);15 for (int i = 0; i < 10; i++) {16 studentList.add(new Student("student" + i, 10 +i));17 }18 //获取年龄大于15的学生19 //[Student{name='student6', age=16}, Student{name='student7', age=17}, Student{name='student8', age=18}, Student{name='student9', age=19}]

20 List filteredStudents =test(studentList, PredicateTest::filterAge1);21 System.out.println(filteredStudents);22 //获取年龄大于15并且名字叫 "student7" 的学生23 //[Student{name='student7', age=17}]

24 filteredStudents =and(studentList, PredicateTest::filterAge1, PredicateTest::filterName);25 System.out.println(filteredStudents);26 //获取年龄不大于15的学生27 //[Student{name='student0', age=10}, Student{name='student1', age=11}, Student{name='student2', age=12}, Student{name='student3', age=13}, Student{name='student4', age=14}, Student{name='student5', age=15}]

28 filteredStudents =negate(studentList, PredicateTest::filterAge1);29 System.out.println(filteredStudents);30 //获取年龄不大于15或名字叫 "student7" 的学生31 //[Student{name='student0', age=10}, Student{name='student1', age=11}, Student{name='student2', age=12}, Student{name='student3', age=13}, Student{name='student4', age=14}, Student{name='student5', age=15}, Student{name='student7', age=17}]

32 filteredStudents =or(studentList, PredicateTest::filterAge2, PredicateTest::filterName);33 System.out.println(filteredStudents);34 //获取和目标学生属性值相同的学生列表35 //[Student{name='student1', age=11}]

36 filteredStudents = isEqual(studentList, new Student("student1", 11));37 System.out.println(filteredStudents);38

39 }40

41

42 public static booleanfilterAge1(Student student) {43 return student.getAge() > 15;44 }45

46 public static booleanfilterAge2(Student student) {47 return student.getAge() <= 15;48 }49

50 public static booleanfilterName(Student student) {51 return "student7".equals(student.getName());52 }53

54 public static List test(List students, Predicatepre) {55 List result = new ArrayList<>(10);56 for(Student student : students) {57 if(pre.test(student)) {58 result.add(student);59 }60 }61 returnresult;62 }63

64 public static List and(List students, Predicate pre1, Predicatepre2) {65 List result = new ArrayList<>(10);66 for(Student student : students) {67 if(pre1.and(pre2).test(student)) {68 result.add(student);69 }70 }71 returnresult;72 }73

74 public static List negate(List students, Predicatepre) {75 List result = new ArrayList<>(10);76 for(Student student : students) {77 if(pre.negate().test(student)) {78 result.add(student);79 }80 }81 returnresult;82 }83

84 public static List or(List students, Predicate pre1, Predicatepre2) {85 List result = new ArrayList<>(10);86 for(Student student : students) {87 if(pre1.or(pre2).test(student)) {88 result.add(student);89 }90 }91 returnresult;92 }93

94 public static List isEqual(Liststudents, Student student) {95 List result = new ArrayList<>(10);96 for(Student studentTemp : students) {97 if(Predicate.isEqual(student).test(studentTemp)) {98 result.add(studentTemp);99 }100 }101 returnresult;102 }103

104 //创建静态内部类

105 public static classStudent {106 privateString name;107 private intage;108

109 publicStudent() {110 }111

112 public Student(String name, intage) {113 this.name =name;114 this.age =age;115 }116

117 publicString getName() {118 returnname;119 }120

121 public voidsetName(String name) {122 this.name =name;123 }124

125 public intgetAge() {126 returnage;127 }128

129 public void setAge(intage) {130 this.age =age;131 }132

133 @Override134 publicString toString() {135 return "Student{" +

136 "name='" + name + '\'' +

137 ", age=" + age +

138 '}';139 }140

141 @Override142 public booleanequals(Object o) {143 if (this ==o) {144 return true;145 }146 if (o == null || getClass() !=o.getClass()) {147 return false;148 }149 Student student =(Student) o;150 return age == student.age &&

151 Objects.equals(name, student.name);152 }153 }154 }

java predicate原理_Java Predicate相关推荐

  1. java锁原理_Java锁原理学习

    Java锁原理学习 为了学习Java锁的原理,参照ReentrantLock实现了自己的可重入锁,代码如下: 先上AQS的相关方法: // AQS = AbstractQueuedSynchroniz ...

  2. java 递归原理_Java中递归原理实例分析

    本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...

  3. java synchronized 原理_Java Synchronized的原理

    我们先通过反编译下面的代码来看看Synchronized是如何实现对代码块进行同步的: public classSynchronizedDemo{public voidmethod(){synchro ...

  4. java 静态绑定原理_Java方法的静态绑定与动态绑定讲解

    一:绑定 把一个方法与其所在的类/对象 关联起来叫做方法的绑定.绑定分为静态绑定(前期绑定)和动态绑定(后期绑定). 二:静态绑定 静态绑定(前期绑定)是指:在程序运行前就已经知道方法是属于那个类的, ...

  5. java 编程原理_Java网络编程 -- 网络编程基础原理

    Hello,今天记录下 Java网络编程 --> 网络编程基础原理. 一起学习,一起进步.继续沉淀,慢慢强大.希望这文章对您有帮助.若有写的不好的地方,欢迎评论给建议哈! 初写博客不久,我是杨展 ...

  6. java cas原理_Java并发之原子变量及CAS算法-上篇

    Java并发之原子变量及CAS算法-上篇 编辑 ​ 概述 本文主要讲在Java并发编程的时候,如果保证变量的原子性,在JDK提供的类中是怎么保证变量原子性的呢?.对应Java中的包是:java.uti ...

  7. java map原理_Java HashMap底层原理分析

    前两天面试的时候,被面试官问到HashMap底层原理,之前只会用,底层实现完全没看过,这两天补了补功课,写篇文章记录一下,好记性不如烂笔头啊,毕竟这年头脑子它记不住东西了哈哈哈.好了,言归正传,今天我 ...

  8. java序列化原理_Java序列化机制和原理

    Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...

  9. java数组原理_Java数组排序原理

    Arrays排序原理 Java Arrays排序原理 计数排序源码 (short为例) ​ for (int i = left - 1; ++i <= right;count[a[i] - Sh ...

最新文章

  1. Java EE---通过Spring JDBC实现数据库的增、删、改、查
  2. How to recover from 'programmers burnout(转)
  3. Diagram of Spring 3.0 module dependencies--转载
  4. 市面上的hadoop书籍调研
  5. 如何阻止YouTube在iOS,Android和Web上自动播放视频
  6. 在Java中键入Safe SQL
  7. java学习(127):finally语句
  8. Android4.0设置界面修改总结
  9. LaTeX——双栏论文插入图片
  10. springboot项目打包成jar包
  11. C语言库函数学习知识
  12. 记录一次httpClient下载文件的坑
  13. 开题报告:基于java的电子商务购物网站系统 毕业设计论文开题报告模板
  14. h5在线游戏制作开发:h5模板打地鼠小游戏怎么制作?
  15. #includefile.h与#includefile.h的区别
  16. 鸿蒙系统剽窃,外媒再爆猛料!质疑华为鸿蒙系统抄袭:被指山寨谷歌安卓11系统...
  17. 一个Java 程序的主方法_java application程序中,每一个类中,必有一个主方法main()方法。...
  18. SIR,CQI,RSSI(转自搜狗百科)LTE上报的CQI、PMI、RI分别有什么用(转载自C114论坛)...
  19. 系统安全:修改十四项设置 打造安全牢靠易用电脑
  20. sublimelinter php 语法不起作用,sublime安装插件sublimeLinter不起作用解决办法

热门文章

  1. ubuntu16.04安装zabbix-server3.4
  2. JS一些概念知识及参考链接
  3. 【Python3爬虫】微博用户爬虫
  4. Linux SSH免密码登录
  5. 全面深入介绍C++字符串:string类
  6. JQUERY1.9学习笔记 之内容过滤器(三) has选择器
  7. cstring和string头文件
  8. regsvr32.exe进程注册dll文件
  9. [转]如何写一份交互说明文档
  10. IIS和APACHE共用80端口的方法