java .stream(). 使用介紹 Streams API

三苇渡江發表於2024-08-12

Java 8 引入了 Streams API,它允許我們以宣告性方式處理序列的資料。.stream() 是這一API的核心方法,用於從一個資料來源(如陣列、集合等)建立一個流(Stream)。以下是 .stream() 方法的一些基本使用介紹:

1. 從集合建立流

List<String> myList = Arrays.asList("a", "b", "c"); Stream<String> stream = myList.stream();

  

2. 從陣列建立流

String[] myArray = {"a", "b", "c"}; Stream<String> streamFromArray = Arrays.stream(myArray);

3. 並行流

如果你想要並行處理資料,可以使用 .parallelStream()

Stream<String> parallelStream = myList.parallelStream();

4. 中間操作

中間操作是從一個流到另一個流的惰性操作,不會立即執行,常見的中間操作包括:

  • filter(Predicate):過濾出符合條件的元素。
  • map(Function):將每個元素轉換成另一種形式。
  • distinct():去除重複的元素。
  • sorted()sorted(Comparator):對流中的元素進行排序。
stream.filter(s -> s.startsWith("a")) .map(String::toUpperCase) .distinct() .sorted() .forEach(System.out::println);

5. 終端操作

終端操作是實際執行流操作的步驟,常見的終端操作包括:

  • forEach(Consumer):對流中的每個元素執行操作。
  • count():返回流中元素的總數。
  • reduce(T identity, BinaryOperator):將流中的元素透過某種方式合併成一個值。
  • collect(Collector):將流中的元素收集到一個新集合。
long count = stream.filter(s -> s.startsWith("a")).count(); String joined = stream.map(String::toUpperCase).collect(Collectors.joining(", "));

6. 組合使用

流操作可以組合使用,先進行中間操作,然後執行終端操作。

int sum = myList.stream() .mapToInt(Integer::parseInt) .sum();

7. 使用 Optional 與 Stream

Optional 型別也可以轉換成流。

Optional<String> optional = Optional.of("Hello"); Stream<String> optionalStream = optional.stream();

注意事項

  • 流操作是懶載入的,只有當終端操作被執行時,中間操作才會被實際執行。
  • 流只能被遍歷一次,一旦執行了終端操作,流就會關閉。
  • 使用並行流時,需要注意執行緒安全問題。

Streams API 提供了一種強大而靈活的方式來處理集合資料,使得程式碼更加簡潔和易於理解。

相關文章