本文共 2258 字,大约阅读时间需要 7 分钟。
Java8 中的两大重要改进之一是 Lambda 表达式,另一个则是 Stream API (java.util.stream.*)。Stream API 是 Java8 中处理集合数据的核心抽象概念,它允许我们通过声明性方式对数据源(如集合、数组等)进行操作,支持复杂的筛选、映射和查找等操作。Stream API 的设计理念类似于 SQL 中的查询,能够高效地处理数据,并支持并行执行。
Stream 是 Java8 中的核心抽象概念,它定义了一种数据流,用于对数据源(集合、数组等)生成元素的流式操作。Stream 本身不存储数据,它只是对数据源的操作产生一种间接的表示。Stream 的特点包括:
Stream 操作通常分为三个步骤:
创建 Stream
从数据源(如集合、数组)获取一个 Stream。中间操作
对 Stream 进行一系列处理,如筛选、映射等。终止操作
执行中间操作,并将最终结果收集到一个非 Stream 的目标(如 List、Set、Map 等)。Java8 提供了多种方式创建 Stream:
集合接口提供了两个方法获取 Stream:
stream():返回一个顺序流。parallelStream():返回一个并行流。Java8 的 Arrays.stream() 方法可以将数组转换为 Stream:
int[] array = {1, 2, 3};Stream stream = Arrays.stream(array); 使用 Stream.of() 方法创建 Stream:
Stream stream = Stream.of(1, 2, 3);
使用 Stream.iterate() 和 Stream.generate() 创建无限 Stream:
StreamiterateStream = Stream.iterate(0L, Long::increment);Stream generateStream = Stream.generate(() -> Math.random());
Stream 的中间操作可以分为以下几类:
filter(Predicate<?>):过滤数据。limit(int max size):限制数据量。skip(int count):跳过数据。map(Function<?,?>):将 Stream 中的元素映射到另一个 Stream。mapToObj(Function<?, Object>):将元素映射为对象。mapToInt(Function<?, Integer>):将元素映射为整数。sorted():按顺序排序。sorted(Comparator<?>):根据自定义比较器排序。终止操作将 Stream 转换为非 Stream 的结果类型,常见的终止操作包括:
findFirst():返回第一个元素。findAny():返回任意一个元素。allMatch(Predicate<?>):判断所有元素是否满足条件。reduce(Object):将 Stream 累加为一个对象。reduce(BinaryOperator<Object>):根据自定义操作进行规约。collect(Collectors.toList()):收集为 List。collect(Collectors.toSet()):收集为 Set。collect(Collectors.toMap(K, V, Collector.Characteristics.UNORDERED)):收集为 Map。Stream API 提供了并行流和串行流的切换:
parallel():将 Stream 转换为并行流。sequential():保持串行执行。并行流的优势在于可以将任务拆分到多个线程处理,从而提高性能。默认情况下,Stream 是串行执行的。
Fork/Join 框架是 Java 并行执行的基础,用于将大任务拆分为多个小任务进行处理,然后将结果合并。其核心特点是“工作窃取”模式:
相比传统线程池,Fork/Join 框架的优势在于减少了线程等待时间,提高了性能。
通过对 Stream API 的学习,我们可以更高效地处理数据操作。如果你觉得文章对你有帮助,请关注 「冰河技术」 微信公众号,获取更多 Java8 新特性的学习资源。
转载地址:http://tmvkz.baihongyu.com/