Java filter() 方法的後臺工作原理?


Java 的 filter() 方法允許我們根據指定的條件篩選流中的元素。它是高階函式的一部分,用於對流專案應用某種行為。此方法接受一個謂詞作為引數,並返回與謂詞匹配的元素列表。但問題是,filter() 方法在後臺是如何工作的呢?本文旨在透過一些示例程式來解釋這個問題。

filter() 方法的後臺工作原理

在深入研究 filter() 方法之前,讓我們先了解一下 I/O 流。它是在 Java 中執行輸入和輸出操作時使用的抽象。基本上,輸入流用於從鍵盤、磁碟檔案等來源獲取輸入。輸出流指的是資料顯示或寫入的目標。

現在回到我們關於 filter() 方法的討論。前面我們提到了“謂詞”這個術語,你可能想知道這是什麼以及它與 filter() 方法一起使用的目的是什麼。整個過濾過程都圍繞著這個謂詞展開。它是一個作為引數傳遞給 filter() 方法的功能介面,充當篩選流中不匹配元素的條件。最初,此方法不會丟棄不匹配的元素。相反,它會生成一個新的元素流,其中只包含與謂詞條件匹配的元素。

請注意,filter() 方法是一個無狀態的中間操作,這意味著它不會產生結果,除非我們將其與終止操作(如 count()、collect() 或 forEach())組合使用。這裡,無狀態意味著它不會儲存任何有關先前操作的資訊以供將來使用。

高階函式有兩種

  • 中間操作 − 它們處理輸入流的元素。

  • 終止操作 − 它們觸發中間操作以產生非流結果。

filter() 的語法

filter(predicate);

方法

  • 使用 Arrays.asList() 方法建立一個列表來儲存固定大小的列表。

  • 現在,使用 filter() 方法以及 stream() 和 forEach() 來僅篩選出奇數。這裡,stream() 指定以流的形式輸入,我們將使用 forEach() 來迭代和列印奇數。

  • 再次使用 filter() 方法以及 stream() 和 count() 來列印奇數的個數。

示例 1

下面的示例演示了 filter() 方法的使用。

import java.util.*;
public class Fltr {
   public static void main(String[] args) {
      // creating a list of numbers
      List<Integer> numbers = Arrays.asList(5, 21, 32, 14, 63, 19, 10);
      // printing all numbers in the list
      System.out.println("List of all numbers: " + numbers);
      System.out.println("List of odd numbers: ");
      // filtering only odd numbers from list
      numbers.stream()
         .filter(nums -> nums % 2 == 1)
         .forEach(System.out::println);
      System.out.println("Count of odd numbers: ");
      // printing the count of odd numbers
      System.out.println(numbers.stream()
         .filter(nums -> nums % 2 == 1)
         .count());
   }
}

輸出

List of all numbers: [5, 21, 32, 14, 63, 19, 10]
List of odd numbers:
5
21
63
19
Count of odd numbers:
4

方法

  • 第一步是匯入“java.util.function.Predicate”以啟用 Predicate 類的使用。

  • 定義一個固定大小的列表。

  • 現在,將列印奇數的條件使用抽象方法 test() 放入 Predicate 定義中。

  • 呼叫 filter() 方法以及 stream() 和 forEach() 來篩選出奇數。將謂詞類的例項傳遞到 filter() 中。

  • 再次呼叫 filter() 方法以及 stream() 和 count() 來列印奇數的個數。

示例 2

讓我們看看 filter() 方法的另一個示例,我們將使用 Predicate 類。

import java.util.*;
import java.util.function.Predicate;
public class Fltr {
   public static void main(String[] args) {
      // creating a list of numbers
      List<Integer> numbers = Arrays.asList(5, 21, 32, 14, 63, 19, 10);
      // printing all numbers in the list
      System.out.println("List of all numbers: " + numbers);
      System.out.println("List of odd numbers: ");
      // filtering only odd numbers from list
      Predicate<Integer> newNumbers = new Predicate<Integer>()
      {
         @Override
         public boolean test(Integer nums) {
            return nums % 2 == 1;
         }
      };
      numbers.stream()
         .filter(newNumbers)
         .forEach(System.out::println);
      System.out.println("Count of odd numbers: ");
      // printing the count of odd numbers
      System.out.println(numbers.stream()
         .filter(newNumbers)
         .count());
   }
}

輸出

List of all numbers: [5, 21, 32, 14, 63, 19, 10]
List of odd numbers:
5
21
63
19
Count of odd numbers:
4

結論

filter() 方法在後臺的工作原理是按需將謂詞應用於每個元素。我們已經透過 Java 示例程式詳細定義和解釋了 filter() 方法的工作原理。此外,我們還了解了 Java 程式語言中可用的高階函式型別。

更新於:2023年7月21日

瀏覽量:288

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.