<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Java 謂詞 原文:http://zetcode.com/java/predicate/ Java 謂詞教程展示了如何在 Java 中使用謂詞。 使用謂詞,我們可以創建更清晰易讀的代碼。 謂詞還有助于創建更好的測試。 ## 謂詞 謂詞的一般含義是對正確或錯誤的陳述。 在編程中,謂詞表示返回布爾值的單個參數函數。 ## Java 謂詞 Java 中的謂詞通過接口實現。 `Predicate<T>`是表示單個參數函數的通用函數接口,該函數返回布爾值。 它位于`java.util.function`包中。 它包含`test(T t)`方法,該方法求值給定參數上的謂詞。 在 Java 中,我們沒有獨立的函數。 此外,方法不是一等公民。 (不能將它們添加到集合中或作為參數傳遞給方法。)因此,我們定義接口并從這些接口創建對象。 然后可以將此類對象傳遞給`Iterables.filter()`之類的方法。 使用 Java lambda,使用謂詞要容易得多。 ## Java 謂詞示例 以下示例創建一個簡單的 Java 謂詞。 `com/zetcode/JavaPredicateEx.java` ```java package com.zetcode; import java.util.List; import java.util.function.Predicate; class BiggerThanFive<E> implements Predicate<Integer> { @Override public boolean test(Integer v) { Integer five = 5; return v > five; } } public class JavaPredicateEx { public static void main(String[] args) { List<Integer> nums = List.of(2, 3, 1, 5, 6, 7, 8, 9, 12); BiggerThanFive<Integer> btf = new BiggerThanFive<>(); nums.stream().filter(btf).forEach(System.out::println); } } ``` 在示例中,謂詞用于過濾整數。 ```java class BiggerThanFive<E> implements Predicate<Integer> { @Override public boolean test(Integer v) { Integer five = 5; return v > five; } } ``` 這是實現`Predicate<Integer>`接口的 Java 類。 對于大于 5 的值,其`test()`方法返回 true。 ```java List<Integer> nums = List.of(2, 3, 1, 5, 6, 7, 8, 9, 12); ``` 我們有一個整數值列表。 ```java BiggerThanFive<Integer> btf = new BiggerThanFive<>(); ``` 實例化了`BiggerThanFive`。 ```java nums.stream().filter(btf).forEach(System.out::println); ``` 謂詞對象將傳遞給`filter()`方法,以從列表中獲取所有大于 5 的值。 ```java 6 7 8 9 12 ``` 這是輸出。 ## 使用 lambda 和謂詞 Java lambda 表達式簡化了 Java 謂詞的創建。 `com/zetcode/JavaPredicateEx2.java` ```java package com.zetcode; import java.util.List; import java.util.function.Predicate; public class JavaPredicateEx2 { public static void main(String[] args) { List<Integer> nums = List.of(2, 3, 1, 5, 6, 7, 8, 9, 12); Predicate<Integer> btf = n -> n > 5; nums.stream().filter(btf).forEach(System.out::println); } } ``` 該示例過濾整數值; 這次我們使用 Java lambda 表達式,這使代碼更短。 ```java Predicate<Integer> btf = n -> n > 5; ``` 這是創建謂詞的單一語言。 ## Java 謂詞示例 II 下一個示例使用具有兩個條件的謂詞。 `com/zetcode/Country.java` ```java package com.zetcode; public class Country { private String name; private int population; public Country(String name, int population) { this.name = name; this.population = population; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } @Override public String toString() { return "Country{" + "name=" + name + ", population=" + population + '}'; } } ``` 我們有一個`Country`類; 它具有`name`和`population`屬性。 `com/zetcode/JavaPredicateEx3.java` ```java package com.zetcode; import java.util.ArrayList; import java.util.List; import java.util.function.Predicate; public class JavaPredicateEx3 { public static void main(String[] args) { List<Country> countries = new ArrayList<>(); countries.add(new Country("Iran", 80840713)); countries.add(new Country("Hungary", 9845000)); countries.add(new Country("Poland", 38485000)); countries.add(new Country("India", 1342512000)); countries.add(new Country("Latvia", 1978000)); countries.add(new Country("Vietnam", 95261000)); countries.add(new Country("Sweden", 9967000)); countries.add(new Country("Iceland", 337600)); countries.add(new Country("Israel", 8622000)); Predicate<Country> p1 = c -> c.getName().startsWith("I") && c.getPopulation() > 10000000; countries.stream().filter(p1).forEach(System.out::println); } } ``` 在示例中,我們創建了一個國家列表。 我們按國家名稱和人口過濾列表。 ```java Predicate<Country> p1 = c -> c.getName().startsWith("I") && c.getPopulation() > 10000000; ``` 對于以`"I"`開頭且人口超過一千萬的國家,該謂詞返回正確。 ```java Country{name=Iran, population=80840713} Country{name=India, population=1342512000} ``` 名單中有兩個國家滿足條件:伊朗和印度。 ## Java `IntPredicate` `IntPredicate`表示一個`int`值自變量的謂詞。 這是`Predicate<E>`的`int`消耗型原始類型特化。 `com/zetcode/IntPredicateEx.java` ```java package com.zetcode; import java.util.Arrays; import java.util.function.IntPredicate; public class IntPredicateEx { public static void main(String[] args) { int[] nums = { 2, 3, 1, 5, 6, 7, 8, 9, 12 }; IntPredicate p = n -> n > 5; Arrays.stream(nums).filter(p).forEach(System.out::println); } } ``` 該示例使用`filter()`和`IntPredicate`過濾`int`值數組。 ```java int nums[] = { 2, 3, 1, 5, 6, 7, 8, 9, 12 }; ``` 我們定義一個整數數組。 ```java IntPredicate p = n -> n > 5; ``` 創建了`IntPredicate`; 如果`int`值大于 5,則返回`true`。 ```java Arrays.stream(nums).filter(p).forEach(System.out::println); ``` 我們從數組創建一個流并過濾元素。 `filter()`方法接收謂詞作為參數。 ## 組合謂詞 使用`and()`和`or()`方法,我們可以用 Java 編寫謂詞。 `com/zetcode/JavaPredicateCompose.java` ```java package com.zetcode; import java.util.Arrays; import java.util.function.IntPredicate; public class JavaPredicateCompose { public static void main(String[] args) { int[] nums = {2, 3, 1, 5, 6, 7, 8, 9, 12}; IntPredicate p1 = n -> n > 3; IntPredicate p2 = n -> n < 9; Arrays.stream(nums).filter(p1.and(p2)).forEach(System.out::println); System.out.println("**********"); IntPredicate p3 = n -> n == 6; IntPredicate p4 = n -> n == 9; Arrays.stream(nums).filter(p3.or(p4)).forEach(System.out::println); } } ``` 該示例使用`IntPredicates`的組成過濾數據。 ```java IntPredicate p1 = n -> n > 3; IntPredicate p2 = n -> n < 9; Arrays.stream(nums).filter(p1.and(p2)).forEach(System.out::println); ``` 我們將兩個謂詞與`and()`方法結合使用; 我們得到大于 3 且小于 9 的整數。 ```java IntPredicate p3 = n -> n == 6; IntPredicate p4 = n -> n == 9; Arrays.stream(nums).filter(p3.or(p4)).forEach(System.out::println); ``` 使用`or()`方法,我們得到的值等于 6 或 9。 ```java 5 6 7 8 ********** 6 9 ``` 這是輸出。 ## 否定謂詞 `negate()`方法返回一個謂詞,該謂詞表示給定謂詞的邏輯非。 `com/zetcode/JavaPredicateNegate.java` ```java package com.zetcode; import java.util.Arrays; import java.util.function.IntPredicate; public class JavaPredicateNegate { public static void main(String[] args) { int[] nums = {2, 3, 1, 5, 6, 7, 8, 9, 12}; IntPredicate p = n -> n > 5; Arrays.stream(nums).filter(p).forEach(System.out::println); System.out.println("**********"); Arrays.stream(nums).filter(p.negate()).forEach(System.out::println); } } ``` 該示例演示了`negate()`方法的用法。 ```java IntPredicate p = n -> n > 5; ``` 我們有一個謂詞,對于大于 5 的值返回`true`。 ```java Arrays.stream(nums).filter(p).forEach(System.out::println); ``` 我們過濾所有大于 5 的整數。 ```java Arrays.stream(nums).filter(p.negate()).forEach(System.out::println); ``` 使用`negate()`方法,我們得到相反的結果:值小于或等于 4。 ```java 6 7 8 9 12 ********** 2 3 1 5 ``` 這是示例的輸出。 ## Java 謂詞作為方法參數 謂詞可以作為方法參數傳遞。 `com/zetcode/PredicateMethodParam.java` ```java package com.zetcode; import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class PredicateMethodParam { public static void main(String args[]) { List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); List<Integer> all = eval(list, n -> true); System.out.println(all); List<Integer> evenValues = eval(list, n -> n % 2 == 0); System.out.println(evenValues); List<Integer> greaterThanSix = eval(list, n -> n > 6); System.out.println(greaterThanSix); } private static List<Integer> eval(List<Integer> values, Predicate<Integer> predicate) { return values.stream().filter(predicate) .collect(Collectors.toList()); } } ``` 在示例中,我們將謂詞函數作為第二個參數傳遞給`eval()`方法。 在本教程中,我們使用了 Java 謂詞。 您可能也對相關教程感興趣: [Java 教程](/lang/java/), [Java 中的`HashMap`迭代](/java/hashmapiterate/), [Java `ArrayList`教程](/java/arraylist/), [Java `HashSet`教程](/java/hashset), [Java `static`關鍵字](/java/statickeyword/), [Java8 `forEach`教程](/articles/java8foreach/),[讀取 Java 中的文本文件](/java/readtext/)和[讀取和寫入 Java 中的 ICO 圖像](/articles/javaico/)。 列出[所有 Java 教程](/all/#java)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看