Java 8引入了Stream
API,它為處理集合數據提供了一種更高效、更簡潔的方式。Stream
可以看作是對集合數據進行操作的流水線,支持鏈式調用和并行處理。本文將介紹Java 8中Stream
的基本使用方法。
Stream
是Java 8中引入的一個新特性,它允許你以聲明式的方式處理集合數據。Stream
不是數據結構,而是對數據源(如集合、數組等)進行操作的工具。Stream
操作可以分為兩類:
Stream
,允許鏈式調用。Stream
的結果,如集合、值等,或者不返回任何結果(如forEach
)。在Java 8中,可以通過多種方式創建Stream
。
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
String[] array = {"a", "b", "c"};
Stream<String> stream = Arrays.stream(array);
Stream<String> stream = Stream.of("a", "b", "c");
Stream<String> stream = Stream.generate(() -> "element").limit(10);
Stream<Integer> stream = Stream.iterate(0, n -> n + 2).limit(10);
中間操作是對Stream
進行處理的步驟,返回一個新的Stream
,允許鏈式調用。
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"]
map()
方法用于將元素映射為另一種形式。
List<String> list = Arrays.asList("a", "b", "c");
List<String> result = list.stream()
.map(String::toUpperCase)
.collect(Collectors.toList());
// result: ["A", "B", "C"]
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"]
sorted()
方法用于對元素進行排序。
List<String> list = Arrays.asList("c", "a", "b");
List<String> result = list.stream()
.sorted()
.collect(Collectors.toList());
// result: ["a", "b", "c"]
distinct()
方法用于去除重復元素。
List<String> list = Arrays.asList("a", "b", "a", "c");
List<String> result = list.stream()
.distinct()
.collect(Collectors.toList());
// result: ["a", "b", "c"]
終端操作是Stream
處理的最后一步,返回一個非Stream
的結果。
forEach()
方法用于遍歷Stream
中的每個元素。
List<String> list = Arrays.asList("a", "b", "c");
list.stream().forEach(System.out::println);
// 輸出:
// a
// b
// c
collect()
方法用于將Stream
中的元素收集到一個集合中。
List<String> list = Arrays.asList("a", "b", "c");
List<String> result = list.stream()
.collect(Collectors.toList());
// result: ["a", "b", "c"]
reduce()
方法用于將Stream
中的元素歸約為一個值。
List<Integer> list = Arrays.asList(1, 2, 3);
Optional<Integer> result = list.stream()
.reduce((a, b) -> a + b);
// result: 6
count()
方法用于統計Stream
中的元素個數。
List<String> list = Arrays.asList("a", "b", "c");
long count = list.stream().count();
// count: 3
這些方法用于判斷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
Java 8中的Stream
支持并行處理,可以通過parallelStream()
方法創建并行Stream
。
List<String> list = Arrays.asList("a", "b", "c");
list.parallelStream().forEach(System.out::println);
并行Stream
會自動將任務分配到多個線程上執行,適合處理大量數據。
Java 8中的Stream
API提供了一種高效、簡潔的方式來處理集合數據。通過Stream
,你可以輕松地進行過濾、映射、排序、歸約等操作。Stream
還支持并行處理,能夠充分利用多核CPU的性能。掌握Stream
的使用,可以大大提升代碼的可讀性和執行效率。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。