• Stream 流式编程创建及其常用操作方法


    目录

    Stream 对象如何创建

    Stream 常用的操作方法

    1.过滤(Filter)

    2.映射(Map)

    3.扁平映射(FlatMap)

    4.截断(Limit)

    5.跳过(Skip)

    6.排序(Sorted)

    7.去重(Distinct)

    8.汇总(Collect)

    9.归约(Reduce)

    10.统计(Summary Statistics)


    Stream 对象如何创建

    在Java中,可以通过多种方式创建Stream对象。下面列举了几个常用的方法:

    1. 从集合创建Stream:可以使用stream()方法从Collection接口的实现类(如List、Set)中创建Stream对象。
    2. 从数组创建Stream:可以使用Arrays.stream()方法从数组中创建Stream对象。
    3. 其他方法:还可以使用各种I/O操作、日期时间API等创建特定类型的Stream对象。
    4. 通过Stream的静态方法创建Stream:Stream类提供了一些静态方法来创建Stream对象。

            1)使用Stream.of()方法可以接受任意数量的参数,并将它们转换为Stream对象。

            2)使用Stream.iterate()方法可以生成一个包含无限序列的Stream对象,需要传入初始值和生成下一个元素的函数。

            3)使用Stream.generate()方法可以生成一个包含无限元素的Stream对象,需要传入生成元素的函数。

    1. package com.common.demo.stream;
    2. import java.nio.file.Files;
    3. import java.nio.file.Path;
    4. import java.nio.file.Paths;
    5. import java.time.LocalDate;
    6. import java.util.Arrays;
    7. import java.util.List;
    8. import java.util.stream.IntStream;
    9. import java.util.stream.Stream;
    10. /**
    11. * @author Evan Walker
    12. * @version 1.0
    13. * @desc
    14. * @date 2023/10/09 21:46:25
    15. */
    16. public class StreamDemo {
    17. public static void main(String[] args) throws Exception {
    18. // 在Java中,可以通过多种方式创建Stream对象。下面列举了几个常用的方法:
    19. // 从集合创建Stream:可以使用stream()方法从Collection接口的实现类(如List、Set)中创建Stream对象。
    20. List list = Arrays.asList("a", "b", "c");
    21. Stream stream1 = list.stream();
    22. // 从数组创建Stream:可以使用Arrays.stream()方法从数组中创建Stream对象。
    23. int[] array = {1, 2, 3, 4, 5};
    24. IntStream stream2 = Arrays.stream(array);
    25. //其他方法:还可以使用各种I/O操作、日期时间API等创建特定类型的Stream对象。
    26. Stream stream3 = Files.list(Paths.get("dir"));
    27. Stream stream7 = LocalDate.now().datesUntil(LocalDate.now().plusDays(7));
    28. //通过Stream的静态方法创建Stream:Stream类提供了一些静态方法来创建Stream对象。
    29. //使用Stream.of()方法可以接受任意数量的参数,并将它们转换为Stream对象。
    30. Stream stream4 = Stream.of("a", "b", "c");
    31. //使用Stream.iterate()方法可以生成一个包含无限序列的Stream对象,需要传入初始值和生成下一个元素的函数。
    32. Stream stream5 = Stream.iterate(0, n -> n + 1);
    33. // 使用Stream.generate()方法可以生成一个包含无限元素的Stream对象,需要传入生成元素的函数。
    34. Stream stream6 = Stream.generate(Math::random);
    35. }
    36. }

            这些只是创建Stream对象的一些常用方法,根据不同的需求和数据源,可以选择适合的方式来创建Stream。创建Stream后,可以通过链式调用中间操作和终止操作来对数据进行处理和操作。

    Stream 常用的操作方法

    1.过滤(Filter)

        filter() 方法接受一个 Predicate 函数作为参数,用于过滤 Stream 中的元素。只有满足 Predicate 条件的元素会被保留下来。例如:

    1. Stream stream = Stream.of(1, 2, 3, 4, 5);
    2. Stream filteredStream = stream.filter(n -> n % 2 == 0); // 过滤出偶数

    2.映射(Map)

        map() 方法接受一个 Function 函数作为参数,用于对 Stream 中的元素进行映射转换。对每个元素应用函数后的结果会构成一个新的 Stream。例如:

    1. Stream stream = Stream.of("apple", "banana", "cherry");
    2. Stream mappedStream = stream.map(s -> s.length()); // 映射为单词长度

    3.扁平映射(FlatMap)

        flatMap() 方法类似于 map() 方法,不同之处在于它可以将每个元素映射为一个流,并将所有流连接成一个流。这主要用于解决嵌套集合的情况。例如:

    1. List> nestedList = Arrays.asList( Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6) );
    2. Stream flattenedStream = nestedList.stream().flatMap(List::stream); // 扁平化为一个流

    4.截断(Limit

        limit() 方法可以限制 Stream 的大小,只保留前 n 个元素。例如

    1. Stream stream = Stream.of(1, 2, 3, 4, 5);
    2. Stream limitedStream = stream.limit(3); // 只保留前 3 个元素

    5.跳过(Skip)

        skip() 方法可以跳过 Stream 中的前 n 个元素,返回剩下的元素组成的新 Stream。例如:

    1. Stream stream = Stream.of(1, 2, 3, 4, 5);
    2. Stream skippedStream = stream.skip(2); // 跳过前 2 个元素

    6.排序(Sorted)

        sorted() 方法用于对 Stream 中的元素进行排序,默认是自然顺序排序。还可以提供自定义的 Comparator 参数来指定排序规则。例如:

    1. Stream stream = Stream.of(5, 2, 4, 1, 3);
    2. Stream sortedStream = stream.sorted(); // 自然顺序排序

    7.去重(Distinct)

        distinct() 方法用于去除 Stream 中的重复元素,根据元素的 equals()hashCode() 方法来判断是否重复。例如:

    1. Stream stream = Stream.of(1, 2, 2, 3, 3, 3);
    2. Stream distinctStream = stream.distinct(); // 去重

    8.汇总(Collect)

        collect() 方法用于将 Stream 中的元素收集到结果容器中,如 List、Set、Map 等。可以使用预定义的 Collectors 类提供的工厂方法来创建收集器,也可以自定义收集器。例如:

    1. Stream stream = Stream.of("apple", "banana", "cherry");
    2. List collectedList = stream.collect(Collectors.toList()); // 收集为 List

    9.归约(Reduce)

        reduce() 方法用于将 Stream 中的元素依次进行二元操作,得到一个最终的结果。它接受一个初始值和一个 BinaryOperator 函数作为参数。例如:

    1. Stream stream = Stream.of(1, 2, 3, 4, 5);
    2. Optional sum = stream.reduce((a, b) -> a + b); // 对所有元素求和

    10.统计(Summary Statistics)

        summaryStatistics() 方法可以从 Stream 中获取一些常用的统计信息,如元素个数、最小值、最大值、总和和平均值。例如:

    1. IntStream stream = IntStream.of(1, 2, 3, 4, 5);
    2. IntSummaryStatistics stats = stream.summaryStatistics();
    3. System.out.println("Count: " + stats.getCount());
    4. System.out.println("Min: " + stats.getMin());
    5. System.out.println("Max: " + stats.getMax());
    6. System.out.println("Sum: " + stats.getSum());
    7. System.out.println("Average: " + stats.getAverage());

    以上只是 Stream API 提供的一部分常用操作方法,还有许多其他操作方法,如匹配(Match)、查找(Find)、遍历(ForEach)等。

    更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)

  • 相关阅读:
    Gateway 整合 Sentinel 实现网关限流
    2.5 晶体管单管放大电路的三种基本接法
    设计模式:中介者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)
    【Linux系统编程】操作系统的概念、定位 及系统调用
    经典蓝牙Inquiry过程的跳频
    Unity Xlua热更新框架(七):声音与事件管理
    MyBatis 执行原理,源码解读,基于SpringBoot讲解
    杂谈-Android和Ios的对比
    基于头肩部检测的过线客流统计
    【taichi】关于SPH_Taichi的探索与尝试
  • 原文地址:https://blog.csdn.net/tszc95/article/details/133717400