首頁  >  文章  >  Java  >  了解 Java 流中的終端與中間運算符:主要差異與範例

了解 Java 流中的終端與中間運算符:主要差異與範例

Barbara Streisand
Barbara Streisand原創
2024-10-11 10:11:02604瀏覽

Understanding Terminal vs Intermediate Operators in Java Streams: Key Differences and Examples

1. Java Streams概述

Java Streams 在 Java 8 中引入,允許對元素序列進行函數式操作。它們提供了一種以更具聲明性和可讀性的方式處理資料集合的強大方法。

1.1 什麼是終端運營商?

終端運算子是標記流管道結束的操作。它們觸發流中資料的處理並產生結果或副作用。一旦呼叫了終端操作符,流就被視為已消耗,並且不能對其執行進一步的操作。

終端運營商常見範例:

  • forEach():迭代每個元素並執行操作。
  • collect():將流中的元素收集到集合或其他形式。
  • reduce():將流的元素組合成單一結果。
  • count():計算流中元素的數量。

範例程式碼:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class TerminalOperatorExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

        // Terminal operator: forEach
        names.stream().forEach(name -> System.out.println("Name: " + name));

        // Terminal operator: collect
        List<String> filteredNames = names.stream()
                                           .filter(name -> name.startsWith("A"))
                                           .collect(Collectors.toList());
        System.out.println("Filtered Names: " + filteredNames);
    }
}

示範結果:

Name: Alice
Name: Bob
Name: Charlie
Filtered Names: [Alice]

1.2 什麼是中間算子?

中間運算子是將一個流轉換為另一個流的操作。在調用終端操作員之前,它們不會觸發任何處理。這些運算符用於建立操作管道,從而實現高效的資料處理和操作。

中間運算子的常見範例:

  • filter():依照謂詞過濾元素。
  • map():使用函數轉換每個元素。
  • sorted():依照比較器對元素進行排序。
  • distinct():刪除重複元素。

範例程式碼:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class IntermediateOperatorExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Alice");

        // Intermediate operators: filter and map
        List<String> transformedNames = names.stream()
                                              .filter(name -> name.startsWith("A"))
                                              .map(String::toUpperCase)
                                              .distinct()
                                              .collect(Collectors.toList());
        System.out.println("Transformed Names: " + transformedNames);
    }
}

示範結果:

Transformed Names: [ALICE]

2. 終端運營商和中間運營商之間的主要區別

了解這些運算符之間的差異對於有效的流處理至關重要。

2.1 目的和功能

  • 終端操作符:結束流管道,觸發處理,並產生結果或副作用。它們旨在執行操作並從流中產生輸出。
  • 中間運算子:將流轉換為另一個流,而不對資料進行任何處理。它們用於建立操作管道,一旦呼叫終端操作符就會執行這些操作。

2.2 執行與性能

  • 終端機操作符:導致整個流管道的處理。它們僅執行一次,根據操作的不同,計算成本可能會很高。
  • 中間運算子:是惰性的,在呼叫終端運算子之前不執行任何處理。這允許高效的操作鏈接,而無需不必要的計算。

2.3 可變性和狀態

  • 終端操作符:可能會產生副作用或修改外部狀態。例如,forEach() 可以將元素列印到控制台或更新外部集合。
  • 中間運算子:無狀態,不修改外部狀態。它們僅處理流中的資料並產生新的流作為輸出。

三、結論

了解 Java Streams 中的終端和中間運算子對於編寫高效且可讀的程式碼至關重要。終端算子完成流處理管道,而中間算子建構和轉換管道。透過有效地利用這些運算符,您可以以更具聲明性和功能性的方式處理資料處理任務。

如果您有任何疑問或需要進一步說明,請隨時在下面評論!

閱讀更多文章:了解 Java 流中的終端與中間運算符:主要差異與範例

以上是了解 Java 流中的終端與中間運算符:主要差異與範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn