Java Stream API是Java 8中引入的一個全新的API。它允許開發者以聲明式的方式對集合進行操作,將集合的操作過程串聯起來,從而提高代碼的可讀性和效率。
一、基本概念
Java Stream是一個將集合類(Collection)與數組(Array)處理提升到新高度的Java 8新特性。它實現了對集合、數組等對象的高效遍歷和聚合操作。Stream API是通過一系列的流管道連接高效的進行一個或多個操作的。Stream具備以下特性:
– 聲明式:Stream允許以聲明式方式來處理數據,不需要關心數據處理的實現細節,讓代碼更加簡潔和易讀。
– 可變收集:Stream API提供了豐富的任意類型操作支持,支持彙集、過濾、排序以及聚合等多個操作,可動態構造自定義操作來適應不同的需求。
– 並行計算:Stream API集成了Fork-Join框架,擁有內置並行計算功能,可以充分利用多核處理器的優勢來提高效率。
二、Stream的創建
Stream API提供了多種方式來創建Stream。
1. 創建Stream
– 通過集合創建
“` java
List list = Arrays.asList(“java”, “stream”, “api”);
Stream stream = list.stream();
“`
– 通過數組創建
“` java
String[] array = {“java”, “stream”, “api”};
Stream stream = Arrays.stream(array);
“`
– 通過Stream的靜態方法創建
“` java
Stream streamOfArray = Stream.of(“java”, “stream”, “api”);
Stream streamOfInt = Stream.of(1, 2, 3, 4, 5);
Stream streamBuilder = Stream.builder().add(“java”).add(“stream”).add(“api”).build();
“`
2. Stream的創建
“` java
Stream.iterate(0, n -> n + 2).limit(10).forEach(x -> System.out.print(x + “, “));
Stream.generate(Math::random).limit(5).forEach(System.out::println);
IntStream.range(1, 4).forEach(System.out::println);
IntStream.rangeClosed(1, 4).forEach(System.out::println);
“`
三、Stream的操作
Stream API提供了兩類操作,中間操作和終端操作。
1. 中間操作
– filter方法:過濾掉不需要的元素。
“` java
List list = Arrays.asList(“java”, “stream”, “api”);
list.stream().filter(e -> e.contains(“a”)).forEach(System.out::println);
“`
– map方法:將一個元素類型轉化為另外一種類型。
“` java
List list = Arrays.asList(“java”, “stream”, “api”);
Stream stream = list.stream().map(String::toUpperCase);
“`
– flatMap方法:可以將一個流中的元素類型轉換為另外一個流。
“` java
List list = Arrays.asList(“hello world”, “java stream api”);
list.stream().flatMap(line -> Arrays.stream(line.split(” “))).distinct().forEach(System.out::println);
“`
– peek方法:在流的每個元素恢複流之前執行一些操作。
“` java
List list = Arrays.asList(1, 2, 3);
list.stream().peek(e -> System.out.println(“Found number: ” + e)).map(e -> e * 2).forEach(System.out::println);
“`
2. 終端操作
– forEach方法:迭代流中的每個元素。
“` java
List list = Arrays.asList(1, 2, 3);
list.stream().forEach(System.out::println);
“`
– count方法:統計流中元素的個數。
“` java
List list = Arrays.asList(1, 2, 3, 4, 5);
long count = list.stream().count();
“`
– reduce方法:用給定的函數聚合流中的元素。
“` java
List list = Arrays.asList(1, 2, 3, 4, 5);
Optional sum = list.stream().reduce((a, b) -> a + b);
“`
– collect方法:用給定的容器按照特定的規則收集流中的元素。
“` java
List list = Arrays.asList(1, 2, 3, 4, 5);
List evenNumbers = list.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
“`
四、Stream和並行計算
Stream API提供了內置的並行計算功能,充分利用多核處理器的性能優勢。
“` java
List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
long count = list.parallelStream().filter(n -> n % 2 == 0).count();
“`
五、總結
Java Stream API是Java 8中引入的一個非常有用的新特性,它提供了一種簡單而又強大的方法來處理集合數據、數組和其他序列數據。使用Stream API的代碼可以變得更加簡潔、易讀和易於維護,而且還能夠實現更高效的數據處理。除了在性能和效率方面的顯著提高之外,Stream API還可以實現更多的流控制,從而實現更複雜的數據處理過程。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/257425.html