Java中的Stream函數是Java 8引入的新特性,它提供了一種全新的方式來處理集合和陣列等資料集。 Stream提供了一種函數式程式設計的方式來進行流程操作,同時也大大簡化了程式碼的編寫。在本文中,我們將探討如何使用Java中的Stream函數進行流程操作。
一、什麼是Stream函數
Stream函數是Java 8引進的新功能。它為我們提供了一種函數式程式設計的方式來進行流程操作,以此來簡化我們的程式碼。 Stream函數可以用於對集合、陣列等資料結構中的元素進行操作,以此來實現我們所需的功能。
Stream函數有兩種操作模式,分別是中間操作和終止操作。中間操作可以進行多次,而終止操作將會停止流的處理並傳回一個結果或副作用。同時,Stream也具備並行處理的能力。
二、使用Stream函數進行流程運算
我們可以透過集合的stream()方法或陣列的Stream.of( )方法來取得流對象。例如:
List<Integer> list = Arrays.asList(1, 2, 3); Stream<Integer> stream1 = list.stream(); // 通过list对象获取stream对象 Stream<Integer> stream2 = Stream.of(1, 2, 3); // 通过Stream.of()方法获取stream对象
Stream中提供了許多中間操作方法,這些方法可以篩選、映射、切片等操作。下面我們來逐一了解這些操作方法:
(1) filter()方法:過濾元素
List<Integer> list = Arrays.asList(1, 2, 3, 4); Stream<Integer> stream = list.stream(); stream.filter(i -> i%2 == 0).forEach(System.out::println); // 输出2和4
(2) map()方法:映射元素
List<String> list = Arrays.asList("Java", "Python", "Ruby"); Stream<String> stream = list.stream(); stream.map(String::toLowerCase).forEach(System.out::println); // 输出java, python, ruby
(3) flatMap()方法:扁平化流
List<List<Integer>> list = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6)); Stream<List<Integer>> stream = list.stream(); stream.flatMap(Collection::stream).forEach(System.out::println); // 输出1, 2, 3, 4, 5, 6
(4) distinct()方法:去重
List<Integer> list = Arrays.asList(1, 2, 3, 1, 2, 3); Stream<Integer> stream = list.stream(); stream.distinct().forEach(System.out::println); // 输出1, 2, 3
(5) sorted()方法:排序
#List<Integer> list = Arrays.asList(3, 2, 1); Stream<Integer> stream = list.stream(); stream.sorted().forEach(System.out::println); // 输出1, 2, 3
(6) limit()方法:限制元素個數
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream = list.stream(); stream.limit(3).forEach(System.out::println); // 输出1, 2, 3
(7) skip()方法:跳過元素
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream = list.stream(); stream.skip(2).forEach(System.out::println); // 输出3, 4, 5
(8) peek()方法:追加元素
List<Integer> list = Arrays.asList(1, 2, 3); Stream<Integer> stream1 = list.stream(); Stream<Integer> stream2 = stream1.peek(System.out::println); stream2.count(); // 输出1, 2, 3
Stream中提供了許多終止操作方法,這些方法可以將流處理的結果傳回。下面我們來逐一了解這些操作方法:
(1) forEach()方法:迭代流中的元素
List<Integer> list = Arrays.asList(1, 2, 3); Stream<Integer> stream = list.stream(); stream.forEach(System.out::println); // 输出1, 2, 3
(2) count()方法:統計元素個數
List<Integer> list = Arrays.asList(1, 2, 3); Stream<Integer> stream = list.stream(); stream.count(); // 输出3
(3) toArray()方法:將流中的元素轉換為數組
List<Integer> list = Arrays.asList(1, 2, 3); Stream<Integer> stream = list.stream(); Object[] array = stream.toArray(); System.out.println(Arrays.toString(array)); // 输出[1, 2, 3]
(4) reduce()方法:將流中的元素進行歸約
List<Integer> list = Arrays.asList(1, 2, 3); Stream<Integer> stream = list.stream(); int result = stream.reduce(0, (x, y) -> x + y); System.out.println(result); // 输出6
(5) collect()方法:將流中的元素進行收集
List<Integer> list = Arrays.asList(1, 2, 3); Stream<Integer> stream = list.stream(); List<Integer> newList = stream.collect(Collectors.toList()); System.out.println(newList); // 输出[1, 2, 3]
Stream函數也提供了平行流操作的功能,可以透過parallel()方法將流轉換為平行流。並行流可以充分利用多核心CPU的處理能力,提高程式的運作效率。例如:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream = list.parallelStream(); stream.forEach(System.out::println); // 输出1, 2, 3, 4, 5
三、總結
Stream函數是Java 8中的新特性,它提供了一種全新的方式來處理集合和陣列等資料集。透過Stream函數的中間操作和終止操作,我們可以輕鬆地篩選、映射、去重、排序、限制元素個數、跳過元素和追加元素等操作。同時,透過並行流操作,我們可以充分利用多核心CPU的處理能力,提高程式的運作效率。以上介紹的只是Stream函數的一部分功能,對於複雜的業務邏輯還需要透過應用Stream函數的各種操作方法來實現。
以上是如何使用Java中的Stream函數進行流程操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!