精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java 8 Predicate 函數接口

開發 后端
Predicate 函數接口同之前介紹的 Function 接口一樣,是一個函數式接口,它可以接受一個泛型 <T> 參數,返回值為布爾類型。

[[414975]]

本文轉載自微信公眾號「未讀代碼」,作者未讀君。轉載本文請聯系未讀代碼公眾號。

Predicate 函數接口同之前介紹的 Function 接口一樣,是一個函數式接口,它可以接受一個泛型 <T> 參數,返回值為布爾類型。Predicate 常用于數據過濾,如過濾出集合中符合某個條件的元素。

源碼:Java 8 中函數接口 Predicate。

  1. package java.util.function
  2.  
  3. import java.util.Objects; 
  4.  
  5. @FunctionalInterface 
  6. public interface Predicate<T> { 
  7.  
  8.     boolean test(T t); 
  9.  
  10.     default Predicate<T> and(Predicate<? super T> other) { 
  11.         Objects.requireNonNull(other); 
  12.         return (t) -> test(t) && other.test(t); 
  13.     } 
  14.    
  15.     default Predicate<T> negate() { 
  16.         return (t) -> !test(t); 
  17.     } 
  18.  
  19.     default Predicate<T> or(Predicate<? super T> other) { 
  20.         Objects.requireNonNull(other); 
  21.         return (t) -> test(t) || other.test(t); 
  22.     } 
  23.  
  24.     static <T> Predicate<T> isEqual(Object targetRef) { 
  25.         return (null == targetRef) 
  26.                 ? Objects::isNull 
  27.                 : object -> targetRef.equals(object); 
  28.     } 

1. Predicate test

Predicate 函數接口可以用于判斷一個參數是否符合某個條件。

示例:判斷某個字符串是否為空。

  1. import java.util.function.Predicate; 
  2.  
  3. public class Java8PredicateTest { 
  4.     public static void main(String[] args) { 
  5.         Predicate<String> isEmpty = String::isEmpty; 
  6.         System.out.println(isEmpty.test("")); 
  7.         System.out.println(isEmpty.test("www.wdbyte.com")); 
  8.     } 

輸出結果:

  1. true 
  2. false 

2. Predicate Stream filter

Stream 中的 filter() 方法是通過接收一個 Predicate 函數接口實現的。

示例:過濾出集合中,字符串長度為 4 的字符串。

  1. import java.util.Arrays; 
  2. import java.util.List; 
  3. import java.util.stream.Collectors; 
  4.  
  5. public class Java8PredicateFilter { 
  6.  
  7.     public static void main(String[] args) { 
  8.         List<String> list = Arrays.asList("java""node""www.wdbyte.com"); 
  9.         list = list.stream().filter(str -> str.length() == 4).collect(Collectors.toList()); 
  10.         System.out.println(list); 
  11.     } 

輸出結果:

  1. [java, node] 

3. Predicate and

使用 and() 方法,可以讓前后兩個 Predicate 判斷條件一起生效。

示例 1:過濾數字集合中,數字大小在 5 至 9 之間的數字。

  1. import java.util.Arrays; 
  2. import java.util.List; 
  3. import java.util.function.Predicate; 
  4. import java.util.stream.Collectors; 
  5.  
  6. public class Java8PredicateAnd { 
  7.  
  8.     public static void main(String[] args) { 
  9.         List<Integer> numberList = Arrays.asList(3, 4, 5, 6, 7, 8, 9, 10); 
  10.  
  11.         Predicate<Integer> greaterThan5 = number -> number > 5; 
  12.         Predicate<Integer> lessThan9 = number -> number < 9; 
  13.         Predicate<Integer> filter = greaterThan5.and(lessThan9); 
  14.  
  15.         numberList = numberList.stream().filter(filter).collect(Collectors.toList()); 
  16.         System.out.println(numberList); 
  17.     } 

結果輸出:

  1. [6, 7, 8] 

示例 2:一個 Predicate 過濾數字集合中,數字大小在 5 至 9 之間的數字。

  1. List<Integer> numberList = Arrays.asList(3, 4, 5, 6, 7, 8, 9, 10); 
  2. numberList = numberList.stream().filter(x -> x > 5 && x < 9).collect(Collectors.toList()); 
  3. System.out.println(numberList); 

輸出結果;

  1. [6, 7, 8] 

4. Predicate negate

predicate.negate() 方法會返回一個與指定判斷相反的 Predicate。

示例:過濾數字集合中,數字不大于 5 的數字。

  1. import java.util.Arrays; 
  2. import java.util.List; 
  3. import java.util.function.Predicate; 
  4. import java.util.stream.Collectors; 
  5.  
  6. public class Java8PredicateNeagete { 
  7.  
  8.     public static void main(String[] args) { 
  9.         List<Integer> numberList = Arrays.asList(3, 4, 5, 6, 7, 8, 9, 10); 
  10.         Predicate<Integer> greaterThan5 = number -> number > 5; 
  11.  
  12.         numberList = numberList.stream().filter(greaterThan5.negate()).collect(Collectors.toList()); 
  13.         System.out.println(numberList); 
  14.     } 

輸出結果:

  1. [3, 4, 5] 

5. Predicate or

示例:過濾數字集合中,數字小于等于 5,或者大于等于 9 的數字。

  1. import java.util.Arrays; 
  2. import java.util.List; 
  3. import java.util.function.Predicate; 
  4. import java.util.stream.Collectors; 
  5.  
  6. public class Java8PredicateOr { 
  7.  
  8.     public static void main(String[] args) { 
  9.         List<Integer> numberList = Arrays.asList(3, 4, 5, 6, 7, 8, 9, 10); 
  10.  
  11.         Predicate<Integer> lessThan5 = number -> number <= 5; 
  12.         Predicate<Integer> greaterThan8 = number -> number >= 9; 
  13.  
  14.         numberList = numberList.stream().filter(lessThan5.or(greaterThan8)).collect(Collectors.toList()); 
  15.         System.out.println(numberList); 
  16.     } 

輸出結果:

  1. [3, 4, 5, 9, 10] 

6. Predicate 鏈式編程

Predicate 的 or() ,and(),negate() 方法可以隨意組合 Predicate,組合后的判斷邏輯是從左到右,從前到后,順次判斷。

如:(數字小于 5 ).and (數字大于 9 ).negate()。

解:(數字小于 5 )AND (數字大于 9 ) 對于任意數字都得 false,false.negate() 取相反 得 true。

所以,此判斷邏輯對于任意數字都為 true。

示例:Predicate 的 or() ,and(),negate() 方法組合使用。

  1. import java.util.ArrayList; 
  2. import java.util.Arrays; 
  3. import java.util.List; 
  4. import java.util.function.Predicate; 
  5.  
  6. public class Java8PredicateChain { 
  7.  
  8.     public static void main(String[] args) { 
  9.         List<Integer> numberList = Arrays.asList(3, 4, 5, 6, 7, 8, 9, 10); 
  10.  
  11.         Predicate<Integer> lessThan5 = number -> number <= 5; 
  12.         Predicate<Integer> greaterThan9 = number -> number >= 9; 
  13.  
  14.         // 小于等于 5 
  15.         System.out.println(filter(numberList, lessThan5)); 
  16.         // 大于 5 
  17.         System.out.println(filter(numberList, lessThan5.negate())); 
  18.         // 小于等于 5 或者大于等于 9 
  19.         System.out.println(filter(numberList, lessThan5.or(greaterThan9))); 
  20.         // ! (小于等于 5 AND 大于等于 9) 
  21.         System.out.println(filter(numberList, lessThan5.and(greaterThan9).negate())); 
  22.     } 
  23.  
  24.     public static <T> List<T> filter(List<T> list, Predicate<T> predicate) { 
  25.         List<T> resultList = new ArrayList<>(); 
  26.         for (T t : list) { 
  27.             if (predicate.test(t)) { 
  28.                 resultList.add(t); 
  29.             } 
  30.         } 
  31.         return resultList; 
  32.     } 

輸出結果:

  1. [3, 4, 5] 
  2. [6, 7, 8, 9, 10] 
  3. [3, 4, 5, 9, 10] 
  4. [3, 4, 5, 6, 7, 8, 9, 10] 

7. Predicate 與對象

示例:過濾符合某些特征的狗。

  1. import java.util.ArrayList; 
  2. import java.util.List; 
  3. import java.util.function.Predicate; 
  4.  
  5. public class Java8PredicateObject { 
  6.  
  7.     public static void main(String[] args) { 
  8.         List<Dog> dogList = new ArrayList<>(); 
  9.         dogList.add(new Dog("哈士奇", 1)); 
  10.         dogList.add(new Dog("牧羊犬", 2)); 
  11.         dogList.add(new Dog("柯基", 3)); 
  12.         dogList.add(new Dog("柴犬", 3)); 
  13.  
  14.         // 找到 3歲的狗 
  15.         System.out.println(filter(dogList, dog -> dog.getAge().equals(3))); 
  16.         // 找到哈士奇信息 
  17.         Predicate<Dog> predicate = dog -> ("哈士奇").equals(dog.getName()); 
  18.         System.out.println(filter(dogList, predicate)); 
  19.     } 
  20.  
  21.     public static <T> List<T> filter(List<T> list, Predicate<T> predicate) { 
  22.         List<T> resultList = new ArrayList<>(); 
  23.         for (T t : list) { 
  24.             if (predicate.test(t)) { resultList.add(t); } 
  25.         } 
  26.         return resultList; 
  27.     } 
  28.  
  29. class Dog { 
  30.     private String name
  31.     private Integer age; 
  32.  
  33.     public Dog(String nameInteger age) { 
  34.         this.name = name
  35.         this.age = age; 
  36.     } 
  37.  
  38.     public String getName() { 
  39.         return name
  40.     } 
  41.  
  42.     public void setName(String name) { 
  43.         this.name = name
  44.     } 
  45.  
  46.     public Integer getAge() { 
  47.         return age; 
  48.     } 
  49.  
  50.     public void setAge(Integer age) { 
  51.         this.age = age; 
  52.     } 
  53.  
  54.     @Override 
  55.     public String toString() { 
  56.         return "Dog{" + 
  57.             "name='" + name + '\'' + 
  58.             ", age=" + age + 
  59.             '}'
  60.     } 

輸出結果:

  1. [Dog{name='柯基', age=3}, Dog{name='柴犬', age=3}] 
  2. [Dog{name='哈士奇', age=1}] 

BiPredicate 和 Predicate 函數接口一樣,都是返回一個布爾類型,唯一不同的是 Predicate 接受一個參數,而 BiPredicate 可以接受兩個不同類型的參數。

BiPredicate 在 Java 8 中源碼:

  1. package java.util.function
  2.  
  3. import java.util.Objects; 
  4. @FunctionalInterface 
  5. public interface BiPredicate<T, U> { 
  6.     boolean test(T t, U u); 
  7.  
  8.     default BiPredicate<T, U> and(BiPredicate<? super T, ? super U> other) { 
  9.         Objects.requireNonNull(other); 
  10.         return (T t, U u) -> test(t, u) && other.test(t, u); 
  11.     } 
  12.  
  13.     default BiPredicate<T, U> negate() { 
  14.         return (T t, U u) -> !test(t, u); 
  15.     } 
  16.  
  17.     default BiPredicate<T, U> or(BiPredicate<? super T, ? super U> other) { 
  18.         Objects.requireNonNull(other); 
  19.         return (T t, U u) -> test(t, u) || other.test(t, u); 
  20.     } 

 

責任編輯:武曉燕 來源: 未讀代碼
相關推薦

2021-04-14 07:33:02

Java函數式斷言

2023-07-26 07:13:55

函數接口Java 8

2019-08-05 08:05:27

Java開發代碼

2020-05-25 16:25:17

Java8Stream函數式接口

2023-10-23 14:16:01

Java函數式編程

2024-02-28 08:37:28

Lambda表達式Java函數式接口

2020-10-16 10:07:03

Lambda表達式Java8

2022-12-26 07:47:37

JDK8函數式接口

2024-07-18 08:00:00

2024-06-12 00:00:01

Java函數式接口

2015-12-21 11:47:22

Java 8組合函數

2023-12-22 16:39:47

Java函數式接口開發

2022-01-19 11:19:25

Java/接口/代碼

2015-09-28 14:54:08

Java函數式編程

2025-06-26 08:10:00

Java8函數

2015-09-30 09:34:09

java8字母序列

2024-08-19 02:00:00

FunctionJava8接口

2022-11-30 16:58:01

Java系統函數式

2020-09-22 11:00:11

Java技術開發

2021-05-26 05:36:52

登陸接口開發代碼
點贊
收藏

51CTO技術棧公眾號

国产精品特级毛片一区二区三区| 精品久久久久久中文字幕人妻最新| 黄网页免费在线观看| 国模娜娜一区二区三区| 国内精品一区二区三区| www.狠狠爱| 欧美视频二区欧美影视| 精品久久久一区二区| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 精品国产av一区二区三区| 一本色道88久久加勒比精品| 色婷婷**av毛片一区| 国产视频精品视频| 免费视频成人| 欧美视频一区二区三区…| 永久域名在线精品| 西西人体44www大胆无码| 久久99久久99| 日韩女优在线播放| 国产真实的和子乱拍在线观看| 韩日一区二区三区| 精品91自产拍在线观看一区| 9久久婷婷国产综合精品性色 | 国产成人三级在线播放| 久久人人97超碰国产公开结果| 九九精品在线播放| 性少妇xx生活| 欧美色图在线播放| 亚洲精品国产精品国自产在线| 亚洲精品国产一区二区三区| 绿色成人影院| 亚洲午夜激情av| 亚洲免费视频播放| 亚洲天天影视| 国产视频911| 免费99视频| 日本人妻熟妇久久久久久 | jlzzjizz在线播放观看| 欧美国产亚洲精品| 51精品秘密在线观看| 国产自偷自偷免费一区| 亚洲欧洲高清| 欧美日韩裸体免费视频| 久久精品xxx| 182tv在线播放| 亚洲婷婷在线视频| 这里只有精品66| 91精品国产综合久久久久久豆腐| 久久久99免费| 日韩国产一区久久| 久草福利在线视频| 国产丝袜欧美中文另类| 青青成人在线| 第一福利在线| 国产精品久久久久永久免费观看| 日韩精品久久久| jizz在线观看中文| 中文字幕中文在线不卡住| 四虎影院一区二区三区| 91吃瓜网在线观看| 一区免费观看视频| av动漫在线免费观看| 秋霞在线午夜| 香蕉加勒比综合久久| 少妇人妻在线视频| 最近高清中文在线字幕在线观看1| 高潮白浆女日韩av免费看| 国产超级av在线| 亚洲mmav| 91精品国产综合久久精品图片| www.51色.com| 精品福利一区| 亚洲一级黄色av| 开心激情五月网| 欧美国产日本| 欧美性在线视频| 久草视频在线免费| 黄页网站大全一区二区| 国产成人免费观看| 日本一区高清| 1区2区3区国产精品| 国产乱子伦精品无码专区| 日韩在线伦理| 欧美精选午夜久久久乱码6080| gogo亚洲国模私拍人体| 亚洲精品进入| 日韩视频免费看| 伊人国产在线观看| 日本最新不卡在线| 91在线观看欧美日韩| 特黄aaaaaaaaa真人毛片| 国产女人18毛片水真多成人如厕| 熟女视频一区二区三区| 手机av在线| 7777精品伊人久久久大香线蕉经典版下载| 国产成人精品一区二区三区在线观看| 网友自拍一区| 久久成年人视频| 免费av网站在线| 国产一区二区导航在线播放| 精品乱色一区二区中文字幕| 午夜免费福利在线观看| 亚洲福中文字幕伊人影院| 欧美午夜性生活| 999在线精品| 在线视频亚洲欧美| 国产一区二区三区影院| 国产综合色精品一区二区三区| 国精产品99永久一区一区| 顶级网黄在线播放| 91福利在线看| 中文在线永久免费观看| 影视亚洲一区二区三区| 国产福利视频一区二区| 日韩在线观看视频一区| 亚洲色图在线播放| 嫩草影院国产精品| 亚洲黄页网站| 韩国精品久久久999| 国产乱码精品一区二三区蜜臂 | 久久国产精品高清| 91一区二区三区在线| 欧美在线一区二区三区| 国产精品久久无码| 亚洲高清久久| 999热视频| 国产原创精品视频| 欧美精品tushy高清| 欧美三级视频网站| 久久午夜电影| 欧美国产一二三区| 大桥未久在线播放| 欧美变态tickle挠乳网站| 亚洲区一区二区三| 麻豆中文一区二区| 亚洲 日韩 国产第一区| 偷拍精品精品一区二区三区| 亚洲精品成人久久| 成年免费在线观看| 99视频热这里只有精品免费| 全黄性性激高免费视频| 国偷自产视频一区二区久| 久久999免费视频| av资源免费看| 一区二区三区久久| 中文字幕一二三区| 午夜久久福利| 99中文视频在线| 日韩三级电影视频| 欧美变态口味重另类| 国产大片aaa| 91在线精品一区二区三区| 北条麻妃在线视频观看| 亚洲精品白浆高清| 国产成人精品免高潮费视频| 成人三级黄色免费网站| 欧美无砖砖区免费| 伊人久久久久久久久久久久久久| 久久99国产精品久久99| 中文字幕久久一区| 亚洲人体在线| 欧美多人爱爱视频网站| 国模无码一区二区三区| 偷拍日韩校园综合在线| 国产在线观看h| 蜜桃久久av一区| 91社在线播放| 99国产精品免费网站| 136fldh精品导航福利| 黄色av网站在线免费观看| 欧美日韩综合色| avove在线播放| 成人国产视频在线观看| 成人黄色片视频| 99re66热这里只有精品8| 91精品国产高清久久久久久91裸体 | 久久国产精品免费观看| 91精品入口| 日本不卡高字幕在线2019| av网站无病毒在线| 欧美成人综合网站| www亚洲视频| 日韩理论片网站| zjzjzjzjzj亚洲女人| 久久只有精品| 国产香蕉一区二区三区| 啪啪国产精品| 成人黄色短视频在线观看| a国产在线视频| 色偷偷噜噜噜亚洲男人的天堂| 亚洲成熟女性毛茸茸| 色噜噜狠狠成人网p站| 爱爱视频免费在线观看| 99国产精品久久久久久久久久久| 在线观看高清免费视频| 一区久久精品| 亚洲一区二区不卡视频| 免费看成人人体视频| 国产欧美日韩专区发布| 欧美aa免费在线| 久久成人人人人精品欧| 高清av在线| 欧美精品一区二区高清在线观看| 中文字幕一区2区3区| 五月天亚洲婷婷| 亚洲 欧美 变态 另类 综合| 久久综合久久久久88| 欧美日韩久久婷婷| 肉肉av福利一精品导航| 久久久久久www| 1024精品久久久久久久久| 欧美一区二视频在线免费观看| 日韩欧美中文在线观看| 国产精品日日做人人爱| а√在线中文在线新版| 欧美成人中文字幕| 日本三级视频在线播放| 亚洲精品综合精品自拍| 人妻无码中文字幕免费视频蜜桃| 欧美日本在线视频| 看黄色一级大片| 欧美三级免费观看| 久久黄色免费视频| 日韩一区日韩二区| 国产农村妇女精品一区| 91免费版在线| 国产制服丝袜在线| 成人污视频在线观看| 亚洲女人在线观看| 久草这里只有精品视频| 密臀av一区二区三区| 亚洲欧美日本视频在线观看| 国产精品999视频| 在线观看一区| 日本福利视频一区| 尤物在线精品| cao在线观看| 在线亚洲国产精品网站| 国产黄页在线观看| 亚洲第一伊人| 霍思燕三级露全乳照| 在线精品一区| 国产v片免费观看| 一本一本久久| 亚洲国产精品久久久久婷蜜芽| 国产欧美日本| 国产精品欧美激情在线观看| 乱码第一页成人| 好男人www社区| 老鸭窝一区二区久久精品| 午夜免费福利视频在线观看| 久久99久久精品欧美| 1314成人网| av色综合久久天堂av综合| 99久久人妻精品免费二区| 99久久99久久久精品齐齐| 在线免费观看污视频| 久久夜色精品国产欧美乱极品| 久久久久久国产精品无码| 国产午夜精品一区二区| 在线观看亚洲大片短视频| 中文字幕一区二区三区不卡| 高h视频免费观看| 亚洲成av人综合在线观看| 日韩不卡视频在线| 在线一区二区三区四区| 91精品视频免费在线观看| 日韩一区二区三区在线观看| 免费观看毛片网站| 亚洲码在线观看| 日本成人在线播放| 欧美夫妻性生活视频| 亚洲精品成人图区| 成人xvideos免费视频| japanese色系久久精品| 欧美日韩电影一区二区| 日韩在线中文| 中国丰满熟妇xxxx性| 视频一区视频二区中文| 男女污污视频网站| 91美女片黄在线观看91美女| 永久免费观看片现看| 亚洲综合一二区| 久久久久久久久久成人| 欧美一区二区三区四区五区 | 久久综合网hezyo| 国产三级电影在线播放| 国产精品中文字幕在线| 久久97精品| 伊人婷婷久久| 另类av一区二区| 中文字幕avav| 国产日产欧美一区二区视频| 欧美毛片在线观看| 在线一区二区三区| 好吊视频一区二区三区| 中文字幕日韩高清| av电影在线地址| 91美女高潮出水| 欧美激情在线精品一区二区三区| 欧洲xxxxx| 美腿丝袜在线亚洲一区| 你懂的在线观看网站| 中文字幕亚洲在| 无码人妻精品一区二区| 欧美成人国产一区二区| 在线免费看av| 秋霞成人午夜鲁丝一区二区三区| 少妇精品在线| 中文字幕一区二区三区四区五区 | 青青视频在线观| 久久99视频精品| 日韩免费在线电影| 欧美性色黄大片人与善| 激情另类综合| 伊人av在线播放| 最新不卡av在线| 中国a一片一级一片| 亚洲精品网址在线观看| 黑人另类精品××××性爽| 成人天堂噜噜噜| 大片网站久久| 激情婷婷综合网| 2020国产成人综合网| 麻豆chinese极品少妇| 欧美色手机在线观看| 九一在线视频| 青青在线视频一区二区三区| 牛牛视频精品一区二区不卡| 青青青在线观看视频| 国产伦精一区二区三区| 亚洲综合第一区| 欧美日韩一区二区三区四区五区| 精品欧美不卡一区二区在线观看 | 国产精品久久久久久久久久辛辛 | aaa级精品久久久国产片| 天天色天天射综合网| 亚洲精品第三页| 亚洲天堂a在线| 国产麻豆免费视频| 久久精品99久久久久久久久| 四虎在线精品| 日韩视频在线观看视频| 国产在线精品一区二区不卡了| fc2ppv在线播放| 欧美一区二区久久| 伊人精品影院| 国产超碰91| 中文久久精品| 女人黄色一级片| 欧美猛男超大videosgay| 黄色成年人视频在线观看| 91在线视频成人| 亚洲一级黄色| 性久久久久久久久久| 欧美中文一区二区三区| 日本中文字幕视频在线| 亚洲wwwav| 99视频一区| 中文字幕成人动漫| 欧美色图在线观看| 久久国产精品一区| 高清视频一区二区三区| 亚洲一区图片| 精品伦精品一区二区三区视频密桃| 欧美日韩免费高清一区色橹橹| а√天堂资源地址在线下载| 国产精品制服诱惑| 久久久精品五月天| av黄色免费在线观看| 日韩欧美综合一区| av男人的天堂在线观看| 日本一区二区三区精品视频| 精品在线亚洲视频| 久久久久无码精品国产| 国产视频精品免费播放| 国产福利亚洲| 国产毛片久久久久久国产毛片| 91免费精品国自产拍在线不卡| 最近中文字幕在线观看视频| 久精品免费视频| 久操精品在线| 无码人妻一区二区三区在线视频| 精品日本高清在线播放| 日本在线观看www| 精品欧美一区二区在线观看视频 | 亚洲精品系列| 午夜影院黄色片| 精品99999| 日韩电影免费观看高清完整版在线观看| 精品国偷自产一区二区三区| 欧美国产日韩a欧美在线观看| 成人黄色免费视频| 国产精品激情自拍| 在线欧美三区| 国产精品夜夜夜爽阿娇| 国产网站欧美日韩免费精品在线观看 | 在线影视一区二区三区| 日韩精品卡一| 一区二区三区的久久的视频|