溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java8中Stream怎么使用

發布時間:2022-09-20 15:24:25 來源:億速云 閱讀:214 作者:iii 欄目:開發技術

Java8中Stream怎么使用

Java 8引入了Stream API,它為處理集合數據提供了一種更高效、更簡潔的方式。Stream 可以看作是對集合數據進行操作的流水線,支持鏈式調用和并行處理。本文將介紹Java 8中Stream的基本使用方法。

1. 什么是Stream?

Stream 是Java 8中引入的一個新特性,它允許你以聲明式的方式處理集合數據。Stream 不是數據結構,而是對數據源(如集合、數組等)進行操作的工具。Stream 操作可以分為兩類:

  • 中間操作:返回一個新的Stream,允許鏈式調用。
  • 終端操作:返回一個非Stream的結果,如集合、值等,或者不返回任何結果(如forEach)。

2. 創建Stream

在Java 8中,可以通過多種方式創建Stream。

2.1 從集合創建

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

2.2 從數組創建

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

2.3 使用Stream.of()

Stream<String> stream = Stream.of("a", "b", "c");

2.4 使用Stream.generate()

Stream<String> stream = Stream.generate(() -> "element").limit(10);

2.5 使用Stream.iterate()

Stream<Integer> stream = Stream.iterate(0, n -> n + 2).limit(10);

3. 中間操作

中間操作是對Stream進行處理的步驟,返回一個新的Stream,允許鏈式調用。

3.1 filter()

filter() 方法用于過濾元素,保留滿足條件的元素。

List<String> list = Arrays.asList("a", "b", "c", "d");
List<String> result = list.stream()
                           .filter(s -> s.startsWith("a"))
                           .collect(Collectors.toList());
// result: ["a"]

3.2 map()

map() 方法用于將元素映射為另一種形式。

List<String> list = Arrays.asList("a", "b", "c");
List<String> result = list.stream()
                           .map(String::toUpperCase)
                           .collect(Collectors.toList());
// result: ["A", "B", "C"]

3.3 flatMap()

flatMap() 方法用于將多個Stream合并為一個Stream。

List<List<String>> list = Arrays.asList(
    Arrays.asList("a", "b"),
    Arrays.asList("c", "d")
);
List<String> result = list.stream()
                           .flatMap(Collection::stream)
                           .collect(Collectors.toList());
// result: ["a", "b", "c", "d"]

3.4 sorted()

sorted() 方法用于對元素進行排序。

List<String> list = Arrays.asList("c", "a", "b");
List<String> result = list.stream()
                           .sorted()
                           .collect(Collectors.toList());
// result: ["a", "b", "c"]

3.5 distinct()

distinct() 方法用于去除重復元素。

List<String> list = Arrays.asList("a", "b", "a", "c");
List<String> result = list.stream()
                           .distinct()
                           .collect(Collectors.toList());
// result: ["a", "b", "c"]

4. 終端操作

終端操作是Stream處理的最后一步,返回一個非Stream的結果。

4.1 forEach()

forEach() 方法用于遍歷Stream中的每個元素。

List<String> list = Arrays.asList("a", "b", "c");
list.stream().forEach(System.out::println);
// 輸出:
// a
// b
// c

4.2 collect()

collect() 方法用于將Stream中的元素收集到一個集合中。

List<String> list = Arrays.asList("a", "b", "c");
List<String> result = list.stream()
                           .collect(Collectors.toList());
// result: ["a", "b", "c"]

4.3 reduce()

reduce() 方法用于將Stream中的元素歸約為一個值。

List<Integer> list = Arrays.asList(1, 2, 3);
Optional<Integer> result = list.stream()
                               .reduce((a, b) -> a + b);
// result: 6

4.4 count()

count() 方法用于統計Stream中的元素個數。

List<String> list = Arrays.asList("a", "b", "c");
long count = list.stream().count();
// count: 3

4.5 anyMatch() / allMatch() / noneMatch()

這些方法用于判斷Stream中的元素是否滿足某個條件。

List<String> list = Arrays.asList("a", "b", "c");
boolean anyMatch = list.stream().anyMatch(s -> s.startsWith("a"));
// anyMatch: true

boolean allMatch = list.stream().allMatch(s -> s.startsWith("a"));
// allMatch: false

boolean noneMatch = list.stream().noneMatch(s -> s.startsWith("d"));
// noneMatch: true

5. 并行Stream

Java 8中的Stream支持并行處理,可以通過parallelStream()方法創建并行Stream。

List<String> list = Arrays.asList("a", "b", "c");
list.parallelStream().forEach(System.out::println);

并行Stream會自動將任務分配到多個線程上執行,適合處理大量數據。

6. 總結

Java 8中的Stream API提供了一種高效、簡潔的方式來處理集合數據。通過Stream,你可以輕松地進行過濾、映射、排序、歸約等操作。Stream還支持并行處理,能夠充分利用多核CPU的性能。掌握Stream的使用,可以大大提升代碼的可讀性和執行效率。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女