Predicate篇

 1 public class Person{
 2     private int age;
 3     private String name;
 4     public Person(int age, String name) {
 5         this.age = age;
 6         this.name = name;
 7     }
 8     public String getName() {
 9         return name;
10     }
11     public void setName(String name) {
12         this.name = name;
13     }
14     public int getAge() {
15         return age;
16     }
17     public void setAge(int age) {
18         this.age = age;
19     }
20     @Override
21     public boolean equals(Object o) {
22         if (this == o) return true;
23         if (o == null || getClass() != o.getClass()) return false;
24         Person person = (Person) o;
25         if (age != person.age ||!name.equals(person.name)) return false;
26         return true;
27     }
28     @Override
29     public int hashCode() {
30         int result = age;
31         result = 31 * result + name.hashCode();
32         return result;
33     }
34 }

 

 

 

 

 1 public class UserStream {
 2 
 3     public static void main(String[] args) {
 4 
 5         // java.util.function中 Function, Supplier, Consumer, Predicate和其他函数式接口广泛用在支持lambda表达式的API中。这些接口有一个抽象方法,会被lambda表达式的定义所覆盖
 6         // Predicate接口主要用来判断一个参数是否符合要求,类似于Junit的assert.
 7 
 8         /**
 9          * 核心方法:
10          *  boolean test(T t)                                       用来处理参数T,看起是否满足要求,可以理解为  条件A
11          *  default Predicate<T> and(Predicate<? super T> other)    可理解为 条件A && 条件B
12          *  default Predicate<T> negate()                           对当前判断进行"!"操作,即取非操作,可理解为 ! 条件A
13          *  default Predicate<T> or(Predicate<? super T> other)     对当前判断进行"||"操作,即取或操作,可以理解为 条件A ||条件B
14          *  static <T> Predicate<T> isEqual(Object targetRef)       对当前操作进行"="操作,即取等操作,可以理解为 A == B
15          *
16          *
17          *  与Predicate<T>相关的接口
18          *      BiPredicate<T, U>   针对两个参数,看两个参数是否符合某个条件表达式
19          *      DoublePredicate     看一个double类型的值是否符合某个条件表达式
20          *      IntPredicate        看一个int类型的值是否符合某个条件表达式
21          *      LongPredicate       看一个long类型的值是否符合某个条件表达式
22          */
23 
24         // 测试1:
25         // test(T t):判断给定的值是否大于0
26         Predicate<Integer> predicate = x -> x > 0;
27         System.out.println(predicate.test(10));  // true
28 
29         // 测试2:
30         // and(Predicate<? super T> other):判断给定的值是否是大于10的偶数
31         Predicate<Integer> predicate = x -> x > 10;
32         predicate = predicate.and(x -> x % 2 == 0);
33         System.out.println(predicate.test(15));  // false
34         System.out.println(predicate.test(18));  // true
35         System.out.println(predicate.test(20));  // true
36 
37         // 测试3:
38         // negate():计算一批用户中年龄大于22岁的用户的数量
39         Predicate<Person> personPredicate = x -> x.getAge() > 22;
40         System.out.println(
41                 Stream.of(
42                         new Person(21, "zhangsan"),
43                         new Person(22, "lisi"),
44                         new Person(23, "wangwu"),
45                         new Person(24, "wangwu"),
46                         new Person(25, "lisi"),
47                         new Person(26, "zhangsan")
48                 ).filter(personPredicate.negate()).count()
49         );
50 
51         // 测试4:
52         // or(Predicate<? super T> other):计算一批用户中名称为"lisi"或者年龄大于25岁的用户的数量
53         Predicate<Person> predicate = x -> x.getName().equals("lisi");
54         predicate = predicate.or(x -> x.getAge() > 25);
55         System.out.println(
56                 Stream.of(
57                         new Person(21, "zhangsan"),
58                         new Person(22, "lisi"),
59                         new Person(23, "wangwu"),
60                         new Person(24, "wangwu"),
61                         new Person(25, "lisi"),
62                         new Person(26, "zhangsan")
63                 ).filter(predicate).count()
64         );
65 
66 
67         // 测试5:isEqual(Object targetRef)
68         // 假设认为两个用户如果年龄一样,名字一样,我们认为是一样的,那我们来找下给定的一批用户中一样的用户
69         Person person = new Person(22, "lisi");
70         Predicate<Person> predicate = Predicate.isEqual(person);
71         System.out.println(
72                 Stream.of(
73                         new Person(21, "zhangsan"),
74                         new Person(22, "lisi"),
75                         new Person(23, "wangwu"),
76                         new Person(24, "wangwu"),
77                         new Person(22, "lisi"),
78                         new Person(26, "zhangsan")
79                 ).filter(predicate).count()
80         );
81     }
82 }

 

posted @ 2020-07-24 15:42  为你编程  阅读(259)  评论(0)    收藏  举报