1. 程式人生 > 其它 >JavaSE-23.1.4【常用函式式介面之Predicate、Predicate案例-篩選滿足條件資料】

JavaSE-23.1.4【常用函式式介面之Predicate、Predicate案例-篩選滿足條件資料】

 1 package day14.lesson1;
 2 
 3 import java.util.function.Predicate;
 4 
 5 /*
 6 1.8 常用函式式介面之Predicate
 7 
 8     Predicate<T>介面通常用於判斷引數是否滿足指定的條件
 9 
10     boolean test(T t) 對給定的引數進行判斷(判斷邏輯由Lambda表示式實現),返回一個布林值
11     default Predicate negate() 返回一個邏輯的否定,對應邏輯非
12     default Predicate and(Predicate other)返回一個組合判斷,對應短路與
13 default Predicate or(Predicate other) 返回一個組合判斷,對應短路或 14 */ 15 public class Demo8Predicate { 16 public static void main(String[] args) { 17 /*boolean b1 = checkString( 18 "hello", 19 (String s) -> { 20 return s.length()>8; 21 }
22 );*/ 23 boolean b1 = checkString("hello", s -> s.length()>8); 24 System.out.println(b1); // #1:false #2:true #3:true 25 boolean b2 = checkString("helloworld", s -> s.length()>8); 26 System.out.println(b2); // #1:true #2:false #3:false 27 28 System.out.println("==================================");
29 30 boolean b3 = checkString("hello", s -> s.length()>8, s -> s.length()<15); 31 System.out.println(b3); // &&and:false ||or:true 32 boolean b4 = checkString("helloworld", s -> s.length()>8, s -> s.length()<15); 33 System.out.println(b4); // &&and:true ||or:true 34 } 35 36 // 判斷給定字串是否滿足要求 37 private static boolean checkString(String str, Predicate<String> pre){ 38 // return pre.test(str); // #1 39 // return !pre.test(str); // #2 取反 40 return pre.negate().test(str); // #3 效果同#2,這是邏輯非官方寫法 41 } 42 43 // 同一個字串給出兩個不同的判斷條件,最後把這兩個判斷的結果做邏輯與運算的結果作為最終的結果 44 private static boolean checkString(String str, Predicate<String> pre1, Predicate<String> pre2){ 45 /*boolean b1 = pre1.test(str); 46 boolean b2 = pre2.test(str); 47 boolean b = b1 && b2; // 短路邏輯與 48 return b;*/ 49 // return pre1.and(pre2).test(str); // 效果同上 50 51 /*boolean b1 = pre1.test(str); 52 boolean b2 = pre2.test(str); 53 boolean b = b1 || b2; // 短路邏輯或 54 return b;*/ 55 return pre1.or(pre2).test(str); // 效果同上 56 } 57 }
 1 package day14.lesson1;
 2 
 3 import java.util.ArrayList;
 4 import java.util.function.Predicate;
 5 
 6 /*
 7 1.9 Predicate案例-篩選滿足條件資料
 8 
 9     需求
10         String[] strArray = {"林青霞,30", "柳巖,34", "張曼玉,35", "貂蟬,31", "王祖賢,33"};
11         字串陣列中有多條資訊,請通過Predicate介面的拼裝將符合要求的字串篩選到集合ArrayList中,並遍歷ArrayList集合
12         同時滿足如下要求:姓名長度大於2;年齡大於33
13     分析
14         有兩個判斷條件,所以需要使用兩個Predicate介面,對條件進行判斷
15         必須同時滿足兩個條件,所以可以使用and方法連線兩個判斷條件
16  */
17 public class Demo9Predicate {
18     public static void main(String[] args) {
19         String[] strArray = {"林青霞,30", "柳巖,34", "張曼玉,35", "貂蟬,31", "王祖賢,33"};
20 
21         /*ArrayList<String> array = myFilter(
22                 strArray,
23                 (String s) -> {
24                     String name = s.split(",")[0];
25                     return name.length()>2;
26                 },
27                 (String s) -> {
28                     String ageStr = s.split(",")[1];
29                     int age = Integer.parseInt(ageStr);
30                     return age>33;
31                 }
32         );*/
33         ArrayList<String> array = myFilter(
34                 strArray,
35                 s -> s.split(",")[0].length() > 2,
36                 s -> Integer.parseInt(s.split(",")[1]) > 33
37         );
38 
39         for (String s: array){
40             System.out.println(s);
41         }
42         // 張曼玉,35
43     }
44 
45     private static ArrayList<String> myFilter(String[] strArr, Predicate<String> pre1, Predicate<String> pre2){
46         ArrayList<String> arrayList = new ArrayList<>();
47 
48         for (String str: strArr){
49             if(pre1.and(pre2).test(str)){
50                 arrayList.add(str);
51             }
52         }
53 
54         return arrayList;
55     }
56 }