Java Stream学习笔记

前言:Java中的Stream是Java 8引入的一个新的API,用于处理集合数据和执行函数式编程。Stream提供了一种高效且简洁的方式来处理和操作集合数据,可以完成各种数据操作,如过滤、映射、排序、聚合等 

目录

前言:Java中的Stream是Java 8引入的一个新的API,用于处理集合数据和执行函数式编程。Stream提供了一种高效且简洁的方式来处理和操作集合数据,可以完成各种数据操作,如过滤、映射、排序、聚合等 

1. 创建Stream

2. Stream的中间操作

3. Stream的终端操作

4. 并行流操作

5. Stream的延迟执行

6. 使用Stream的注意事项:


1. 创建Stream:
   - 通过集合创建Stream:`stream()`、`parallelStream()`
   - 通过数组创建Stream:`Arrays.stream(array)`
   - 通过Stream的静态方法创建:`Stream.of()`
   - 通过文件创建Stream:`Files.lines(path)`

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream1 = numbers.stream(); // 通过集合创建Stream

int[] array = {1, 2, 3, 4, 5};
IntStream stream2 = Arrays.stream(array); // 通过数组创建Stream

Stream<String> stream3 = Stream.of("a", "b", "c"); // 通过Stream的静态方法创建

Stream<String> stream4 = Files.lines(Paths.get("file.txt")); // 通过文件创建Stream

2. Stream的中间操作:
   - 过滤:`filter()`
   - 映射:`map()`、`flatMap()`
   - 排序:`sorted()`
   - 去重:`distinct()`
   - 截断:`limit()`、`skip()` 

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

Stream<String> filteredStream = names.stream().filter(name -> name.length() > 3); // 过滤

Stream<Integer> mappedStream = numbers.stream().map(number -> number * 2); // 映射

Stream<String> flatMappedStream = names.stream().flatMap(name -> Stream.of(name.split(""))); // 拆分映射

Stream<String> sortedStream = names.stream().sorted(); // 排序

Stream<String> distinctStream = names.stream().distinct(); // 去重

Stream<String> limitedStream = names.stream().limit(2); // 截断

Stream<String> skippedStream = names.stream().skip(2); // 跳过

3. Stream的终端操作:
   - 聚合操作:`reduce()`、`collect()`
   - 匹配操作:`allMatch()`、`anyMatch()`、`noneMatch()`
   - 查找操作:`findFirst()`、`findAny()`
   - 统计操作:`count()`
   - 遍历操作:`forEach()`、`forEachOrdered()` 

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

Optional<Integer> sum = numbers.stream().reduce((a, b) -> a + b); // 聚合操作

List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList()); // 收集操作

boolean allMatch = numbers.stream().allMatch(n -> n > 0); // 匹配操作

Optional<Integer> firstNumber = numbers.stream().findFirst(); // 查找操作

long count = numbers.stream().count(); // 统计操作

numbers.stream().forEach(System.out::println); // 遍历操作

4. 并行流操作:
   - 使用`parallelStream()`开启并行流操作
   - 使用`parallel()`和`sequential()`切换并行和顺序流操作

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

List<Integer> parallelList = numbers.parallelStream() // 使用parallelStream()开启并行流操作
                        .filter(n -> n % 2 == 0)
                        .collect(Collectors.toList());

List<Integer> sequentialList = numbers.parallelStream() // 切换回顺序流操作
                        .sequential()
                        .filter(n -> n % 2 == 0)
                        .collect(Collectors.toList());

5. Stream的延迟执行:
   - Stream的中间操作是延迟执行的,只有在终端操作调用时才会执行
   - 这种延迟执行的特性可以提高性能,只对需要的元素进行操作

6. 使用Stream的注意事项:
   - Stream只能被消费一次,一旦被消费后,就无法再使用
   - Stream操作是无状态的,不会修改原始数据,而是生成新的Stream

猜你喜欢

转载自blog.csdn.net/m0_69097184/article/details/131902674