1. 程式人生 > 其它 >常用的函式式介面之Predicate介面

常用的函式式介面之Predicate介面

Predicate<T>:常用的四個方法

boolean test(T t):對給定的引數進行判斷(判斷邏輯由Lambda表示式實現),返回一個布林值

default Predicate<T>negate():返回一個邏輯的否定,對應邏輯非

default Predicate<T>and(Predicate other):返回一個組合判斷,對應短路與

default Predicate<T>or(Predicate other):返回一個組合判斷,對應短路或

Predicate<T>介面通常用於判斷引數是否滿足指定的條件

test、negate方法Demo

package Demo0512;

import java.util.function.Predicate;

public class PredicateDemo {
  public static void main(String[] args) {
      //呼叫方法判斷,具體判斷邏輯由Lambda表示式實現
      boolean b = cheakString("最美不過姑娘你", s -> s.length() > 5);
      System.out.println(b);
      boolean b1 = cheakString("最美不過姑娘你", s -> s.length() > 10);
      System.out.println(b1);

  }
  //定義一個方法用於判斷給定的字串是否符合要求
  private static boolean cheakString(String s, Predicate<String>pc){
      //返回正常的結果
      //return pc.test(s);
      //返回相反的結果
      return pc.negate().test(s);
  }
}

default Predicate<T>and(Predicate other):返回一個組合判斷,對應短路與

default Predicate<T>or(Predicate other):返回一個組合判斷,對應短路或

Demo

package Demo0512;

import java.util.function.Predicate;

public class PredicateDemo01 {
  public static void main(String[] args) {
      //呼叫方法
      boolean b = cheakString("最美不過姑娘你", s -> s.length() > 5, s -> s.length() > 15);
      System.out.println(b);



  }
  //定義一個方法,實現同一個字串給出兩個不同的判斷條件,最後把這兩個條件的結果進行邏輯與、邏輯或操作並作為最終結果
  private static boolean cheakString(String s, Predicate<String>pc,Predicate<String>pc1){
      // return pc.and(pc1).test(s);//進行邏輯與操作,一假全假
      return pc.or(pc1).test(s);//進行邏輯與操作,一真為真
  }
}

練習:

需求:

1.定義一個字串陣列String [] name={};

2.通過Predicate介面的拼裝將符合要求的字串篩選到集合ArrayList中,並遍歷

3.字串需要同時滿足兩個條件:姓名長度>2,年齡大於20

package Demo0512;

import java.util.ArrayList;
import java.util.function.Predicate;

public class PredicateDemo02 {
  public static void main(String[] args) {
      //定義一個數組
      String[]strarray={"張三瘋,45","李四瘋,21","王五,19"};
      //呼叫方法
      ArrayList<String> array = myFilter(strarray, s -> s.split(",")[0].length() > 2, s -> Integer.parseInt(s.split(",")[1]) > 20);
      //遍歷陣列
      for (String s:array){
          System.out.println(s);
      }
  }
  //定義一個方法,通過Predicate介面的拼裝將符合要求的字串篩選到集合ArrayList中
  private static ArrayList<String>myFilter( String[]strarray, Predicate<String>pc,Predicate<String>pc1){
      //定義一個數組
      ArrayList<String>array=new ArrayList<String>();
      //遍歷陣列
      for (String str:strarray){
          if (pc.and(pc1).test(str)){
              array.add(str);
          }
      }
      return array;
  }
}