一、介紹
Java Stream API是Java8中最具有革命性的特性之一,它提供了一個非常方便的機制來處理數據。Java Stream API是對集合和數組進行過濾、映射和歸約等操作的高級工具,極大地方便了數據處理。Stream使Java中的集合操作高效而簡潔,使得開發人員可以專註於業務邏輯。本文將為你介紹Java Stream API的基本操作和高級用法。
二、Java Stream API基本操作
1.創建Stream
Java Stream API可以從一個集合或數組中創建,也可以從文件、I/O通道、生成器等中創建。根據源數據不同,創建Stream的方法不同。
import java.util.List;
import java.util.Arrays;
import java.util.stream.Stream;
public class StreamDemo {
public static void main(String[] args) {
//使用Stream.of()方法創建Stream
Stream<String> stream1 = Stream.of("A", "B", "C");
stream1.forEach(System.out::print);
//使用Arrays.stream()方法創建Stream
String[] arr = { "A", "B", "C" };
Stream<String> stream2 = Arrays.stream(arr);
stream2.forEach(System.out::print);
//創建一個空的Stream
Stream<String> stream3 = Stream.empty();
//根據集合創建Stream
List<String> list = Arrays.asList("A", "B", "C");
Stream<String> stream4 = list.stream();
}
}
2.過濾與映射
Stream還提供了過濾和映射操作,可以很方便地對Stream中的元素進行篩選和轉換。
import java.util.Arrays;
import java.util.stream.Stream;
public class StreamDemo2 {
public static void main(String[] args) {
String[] arr = { "Java", "Python", "C++", "C#" };
Stream<String> stream = Arrays.stream(arr).
filter(x -> x.endsWith("a")).
map(String::toUpperCase);
stream.forEach(System.out::println);
}
}
3.歸約操作
歸約操作是將所有元素合併為一個單一結果的操作。Stream提供了reduce()方法,可以將Stream中的元素歸約為一個結果。
import java.util.stream.Stream;
public class StreamDemo3 {
public static void main(String[] args) {
Integer[] arr = { 1, 2, 3, 4, 5 };
Integer sum = Stream.of(arr).
reduce(0, Integer::sum);
System.out.println(sum);
}
}
三、Java Stream API高級用法
1.並行 Stream
Stream提供了parallel()方法,可以將Stream轉換為並行Stream。並行Stream可以加速處理過程,提高程序效率。
import java.util.stream.Stream;
public class StreamDemo4 {
public static void main(String[] args) {
Integer[] arr = { 1, 2, 3, 4, 5 };
Integer sum = Stream.of(arr).parallel().
reduce(0, Integer::sum);
System.out.println(sum);
}
}
2.Collectors操作
Collectors是Stream API中的一種機制,可以將Stream中的元素進行收集、分組和計數。Collectors可以將Stream中的元素收集到List、Set或Map中,並進行分組、計數等操作。
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class StreamDemo5 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
list.add("C#");
//將Stream中的元素收集到List中
List<String> resultList1 = list.stream().
filter(x -> x.length() >= 4).
collect(Collectors.toList());
//將Stream中的元素收集到Set中
List<String> resultList2 = list.stream().
filter(x -> x.length() >= 4).
collect(Collectors.toSet());
//將Stream中的元素分組
Map<Character, List<String>> resultMap = list.stream().
collect(Collectors.groupingBy(x -> x.charAt(0)));
}
}
3.自定義 Collector
Collector是一個介面,可以實現自定義Collector來對Stream中的元素進行收集和計算。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collector;
import java.util.stream.Collectors;
public class StreamDemo6 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
list.add("C#");
//自定義 Collector
Collector<String, StringBuilder, String> collector =
Collector.of(
StringBuilder::new,
StringBuilder::append,
StringBuilder::append,
StringBuilder::toString);
//使用自定義 Collector
String result = list.stream().
filter(x -> x.length() >= 4).
collect(collector);
System.out.println(result);
}
}
四、結語
Java Stream API是一種非常強大而靈活的數據處理機制,它提供了豐富的操作和方法,可以方便地對數據進行過濾、映射和歸約等操作。熟練掌握Java Stream API可以提高代碼的效率和質量。
原創文章,作者:KXDB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131125.html
微信掃一掃
支付寶掃一掃