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 程式語言中可用的高階函式型別。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP