java predicate原理_Java Predicate
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相关推荐
- java锁原理_Java锁原理学习
Java锁原理学习 为了学习Java锁的原理,参照ReentrantLock实现了自己的可重入锁,代码如下: 先上AQS的相关方法: // AQS = AbstractQueuedSynchroniz ...
- java 递归原理_Java中递归原理实例分析
本文实例分析了Java中递归原理.分享给大家供大家参考.具体分析如下: 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中 ...
- java synchronized 原理_Java Synchronized的原理
我们先通过反编译下面的代码来看看Synchronized是如何实现对代码块进行同步的: public classSynchronizedDemo{public voidmethod(){synchro ...
- java 静态绑定原理_Java方法的静态绑定与动态绑定讲解
一:绑定 把一个方法与其所在的类/对象 关联起来叫做方法的绑定.绑定分为静态绑定(前期绑定)和动态绑定(后期绑定). 二:静态绑定 静态绑定(前期绑定)是指:在程序运行前就已经知道方法是属于那个类的, ...
- java 编程原理_Java网络编程 -- 网络编程基础原理
Hello,今天记录下 Java网络编程 --> 网络编程基础原理. 一起学习,一起进步.继续沉淀,慢慢强大.希望这文章对您有帮助.若有写的不好的地方,欢迎评论给建议哈! 初写博客不久,我是杨展 ...
- java cas原理_Java并发之原子变量及CAS算法-上篇
Java并发之原子变量及CAS算法-上篇 编辑 概述 本文主要讲在Java并发编程的时候,如果保证变量的原子性,在JDK提供的类中是怎么保证变量原子性的呢?.对应Java中的包是:java.uti ...
- java map原理_Java HashMap底层原理分析
前两天面试的时候,被面试官问到HashMap底层原理,之前只会用,底层实现完全没看过,这两天补了补功课,写篇文章记录一下,好记性不如烂笔头啊,毕竟这年头脑子它记不住东西了哈哈哈.好了,言归正传,今天我 ...
- java序列化原理_Java序列化机制和原理
Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一 ...
- java数组原理_Java数组排序原理
Arrays排序原理 Java Arrays排序原理 计数排序源码 (short为例) for (int i = left - 1; ++i <= right;count[a[i] - Sh ...
最新文章
- Java EE---通过Spring JDBC实现数据库的增、删、改、查
- How to recover from 'programmers burnout(转)
- Diagram of Spring 3.0 module dependencies--转载
- 市面上的hadoop书籍调研
- 如何阻止YouTube在iOS,Android和Web上自动播放视频
- 在Java中键入Safe SQL
- java学习(127):finally语句
- Android4.0设置界面修改总结
- LaTeX——双栏论文插入图片
- springboot项目打包成jar包
- C语言库函数学习知识
- 记录一次httpClient下载文件的坑
- 开题报告:基于java的电子商务购物网站系统 毕业设计论文开题报告模板
- h5在线游戏制作开发:h5模板打地鼠小游戏怎么制作?
- #includefile.h与#includefile.h的区别
- 鸿蒙系统剽窃,外媒再爆猛料!质疑华为鸿蒙系统抄袭:被指山寨谷歌安卓11系统...
- 一个Java 程序的主方法_java application程序中,每一个类中,必有一个主方法main()方法。...
- SIR,CQI,RSSI(转自搜狗百科)LTE上报的CQI、PMI、RI分别有什么用(转载自C114论坛)...
- 系统安全:修改十四项设置 打造安全牢靠易用电脑
- sublimelinter php 语法不起作用,sublime安装插件sublimeLinter不起作用解决办法