Java8引入了新的Stream API,提供了很多便捷的操作來處理集合和數組等數據結構。Stream API提供了一種簡單易用的方法來操作數據,可以使代碼更加優雅和可讀。在本篇文章中,我們將會介紹Java8 Stream API的各個方面。
一、創建Stream
Java8中可以使用Stream.of()創建Stream。以下是一個字符串數組的例子:
String[] strArr = {"hello", "world", "java", "stream"};
Stream<String> strStream = Stream.of(strArr);
也可以使用Arrays.stream()方法來創建Stream。下面的例子演示了如何創建一個整型數組的Stream:
int[] intArr = {1, 2, 3, 4};
IntStream intStream = Arrays.stream(intArr);
還可以使用Stream.generate()和Stream.iterate()方法來創建無限的Stream,這些方法中需要提供一個lambda表達式來生成無限的元素。下面的例子演示了如何使用Stream.generate()方法來生成一個由Java隨機數組成的Stream:
Stream<Double> randomStream = Stream.generate(Math::random);
二、中間操作
Stream API提供了一些中間操作來處理Stream中的元素,這些操作會返回一個新的Stream。下面是一些常用的中間操作:
1. filter()
filter()方法用來過濾Stream中的元素,接收一個lambda表達式作為參數,lambda表達式返回一個boolean值。
Stream<String> strStream = Stream.of("hello", "world", "java", "stream");
Stream<String> newStream = strStream.filter(str -> str.length() > 4);
上述代碼會過濾掉長度小於等於4的元素,只會保留長度大於4的元素。
2. map()
map()方法用來對Stream中的每個元素進行映射,接收一個lambda表達式作為參數,lambda表達式必須返回一個新的元素。
Stream<String> strStream = Stream.of("hello", "world", "java", "stream");
Stream<Integer> newStream = strStream.map(str -> str.length());
上述代碼將Stream中每個元素映射成其長度,返回一個新的Integer類型的Stream。
3. distinct()
distinct()方法用來去重,即返回一個沒有重複元素的新Stream。
Stream<String> strStream = Stream.of("hello", "world", "hello");
Stream<String> newStream = strStream.distinct();
上述代碼會去重,只保留一個“hello”元素。
4. sorted()
sorted()方法用來對Stream中的元素進行排序,接收一個Comparator作為參數,如果沒有提供Comparator,則會使用元素默認的自然排序。
Stream<String> strStream = Stream.of("world", "java", "hello", "stream");
Stream<String> newStream = strStream.sorted();
上述代碼會對Stream中的元素進行從小到大的排序。
5. limit()
limit()方法用來取Stream中的前N個元素,其中N由參數決定。
Stream<String> strStream = Stream.of("hello", "world", "java", "stream");
Stream<String> newStream = strStream.limit(2);
上述代碼返回一個包含前兩個元素的新Stream。
三、終止操作
Stream API提供了一些終止操作來對Stream最終的結果進行處理,這些操作會返回一個特定類型的值或void。下面是一些常用的終止操作:
1. forEach()
forEach()方法用來遍歷Stream中所有的元素,接收一個lambda表達式作為參數,該lambda表達式用來對每個元素進行操作。
Stream<String> strStream = Stream.of("hello", "world", "java", "stream");
strStream.forEach(str -> System.out.println(str));
上述代碼會輸出所有的元素。
2. collect()
collect()方法用來將Stream中的所有元素收集到一個集合中,接收一個Collector作為參數,該Collector用來定義集合的類型和如何將元素加入集合中。
Stream<String> strStream = Stream.of("hello", "world", "java", "stream");
List<String> strList = strStream.collect(Collectors.toList());
上述代碼會將Stream中的元素收集到一個List中。
3. reduce()
reduce()方法用來將Stream中的所有元素合併起來,接收一個BinaryOperator作為參數,BinaryOperator用來定義合併操作。
Stream<Integer> intStream = Stream.of(1, 2, 3, 4);
int sumResult = intStream.reduce(0, (a, b) -> a + b);
上述代碼會將Stream中的所有元素相加,返回一個整型的結果。
四、總結
Java8 Stream是一個強大而優雅的API,這使得Java更靈活和易於處理數據。通過使用Stream API,我們可以更好地組織和操作集合和數組等數據結構。不僅減少了代碼量,使代碼更簡潔,同時提高了代碼執行效率。
原創文章,作者:UEOP,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135340.html