Java Stream List

Java Stream List是Java 8中引入的一個新特性,它是JDK中的Stream API(java.util.stream)和List集合(java.util.List)的結合體,提供了一種管道式(stream)處理List的方式。

一、Stream基本操作

Stream為我們提供了非常方便的鏈式操作,可以清晰的表達數據處理的過程。首先,我們需要了解Stream基本操作的概念。

一般來說,一個Stream流程被分為三個部分: 源(source), 中間操作(intermediate), 終止操作(terminal)。舉個例子:

List<String> list = Arrays.asList("one", "two", "three", "four", "five");
list.stream()
    .filter(s -> s.startsWith("t"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);

在這個例子中,list是我們的源(source),每個中間操作(intermediate)都會將原始Stream轉化為一個新的Stream,最後一個終止操作(terminal)會將Stream轉為某個形式的結果,或執行一些操作(e.g. forEach)。

二、Stream與List相結合

對於一個List集合來說,Stream API提供了一些方法來將List轉化為Stream,比如:

  • stream():返回由此列表支持的順序Stream
  • parallelStream():返回一個並行Stream

我們可以利用這些方法來進行數據處理,例如過濾、篩選、排序等操作:

List<String> list = Arrays.asList("one", "two", "three", "four", "five");
list.stream()
    .filter(s -> s.startsWith("t"))
    .map(String::toUpperCase)
    .sorted()
    .forEach(System.out::println);

運行結果為:

TWO
THREE

代碼解釋:

  • filter(s -> s.startsWith("t"))是中間操作(intermediate)。它會將原始的Stream轉化為一個新的Stream,
    其中只包含以t開頭的字元串。
  • map(String::toUpperCase)是一個中間操作(intermediate)。它會將原始的Stream轉化為一個新的Stream,
    其中每個字元串轉化為大寫形式。
  • sorted()是一個中間操作(intermediate)。它會產生一個新的Stream,並對其中的元素進行排序,
    默認按照自然序升序排序。
  • forEach(System.out::println)是一個終止操作(terminal),它會對Stream中的所有元素執行指定操作,
    此處為列印到控制台。

三、Stream的常見操作

除了上面提到的基本操作,Stream API還提供了許多其他的方法,可以讓我們對Stream進行更加複雜的處理。

1. Map操作

Map操作是一種將Stream中的每個元素轉換為另一個對象的操作。例如,我們可以使用map操作將Stream中的每個String對象轉換為Integer類型:

List<String> list = Arrays.asList("1", "2", "3", "4", "5");
list.stream()
    .map(Integer::valueOf)
    .forEach(System.out::println);

運行結果為:

1
2
3
4
5

代碼解釋:

  • map(Integer::valueOf)通過方法引用,將Stream中的每個字元串對象轉換為Integer類型。

2. FlatMap操作

FlatMap操作是一種將Stream中每個元素轉換為另一個Stream對象的操作。例如,我們可以使用flatMap操作將一個Stream<List<T>>轉換為Stream<T>:

List<String> list1 = Arrays.asList("a", "b", "c");
List<String> list2 = Arrays.asList("x", "y", "z");
List<List<String>> nestedList = Arrays.asList(list1, list2);
nestedList.stream()
    .flatMap(Collection::stream)
    .forEach(System.out::println);

運行結果為:

a
b
c
x
y
z

代碼解釋:

  • flatMap(Collection::stream)將每個二級List轉換為一個Stream,然後合併到一起。

3. Filter操作

Filter操作是一種通過Predicate<T>來過濾Stream中元素的操作。例如,下面的代碼演示了如何過濾Stream中的偶數:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream()
    .filter(n -> n % 2 == 0)
    .forEach(System.out::println);

運行結果為:

2
4

代碼解釋:

  • filter(n -> n % 2 == 0)使用lambda表達式過濾掉了Stream中的奇數。

4. Reduce操作

Reduce操作是一種將Stream中前面的元素與後面的元素依次操作的操作,返回一個Optional<T>對象。例如,我們可以使用reduce操作求出List中所有元素的和:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> result = list.stream().reduce((a, b) -> a + b);
System.out.println(result.get());

運行結果為:

15

代碼解釋:

  • reduce((a, b) -> a + b)對Stream中所有的元素求和。

四、小結

Java Stream List提供了一種非常方便的方式來操作List集合。Stream提供了Pipeline(管道)式的處理方式,將原始的數據集合轉化為一個新的Stream,然後經過一系列的中間操作(intermediate),最終產生一個結果或執行一些操作(terminal)。

在實際應用中,我們可以使用Stream API來完成各種各樣的數據操作,例如數據轉換、數據過濾、數據處理等。對於一些複雜的業務邏輯,Stream API的鏈式操作可以讓代碼保持優雅、簡潔。

原創文章,作者:HOGK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/140185.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HOGK的頭像HOGK
上一篇 2024-10-04 00:23
下一篇 2024-10-04 00:23

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • Tensor to List的使用

    Tensor to List是TensorFlow框架提供的一個非常有用的函數,在很多的深度學習模型中都會用到。它的主要功能是將TensorFlow中的張量(Tensor)轉換為P…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論