文章目录。
- Java 8 Stream API。
- 1. Stream。
- 2. Stream 的创建。
- 3. 常见的 Stream 操作。
- 4. Stream 并行操作。
Java 8 Stream API。
- Java 8 引入了。 Stream API。,使得对集合类(如。
List。
、。Set。
等)操作变得更加简洁直观。Stream API 主要目的是简化集合数据的处理,特别是支持。 函数式编程。操作风格。 - Stream 您可以使用声明式集合操作,而不是传统的命令方式。
1. Stream。
- 在 Java 8 中,Stream 处理数据集(如。
List。
、。Set。
、。Map。
等)工具,它允许你在不修改集合本身的情况下,通过一系列操作(过滤、映射、聚合等)处理数据。 - Stream 是一个。流式。的、。单向。#xfff0的数据结构&c;这意味着你一次只能处理一个元素,而且每次处理后流量都会产生新的流量对象,原始流不会改变。
2. Stream 的创建。
Stream 可以通过以下方式创建a;
从集合创建 Stream。:
List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;Stream。stream。 =list。.。stream。(。)。;
从数组创建 Stream。:
String。[。]。array。 ={ 。"apple","banana","cherry"}。;Stream。stream。 =Arrays。.。stream。(。array。)。;
使用 Stream.of() 创建 Stream。:
Stream。stream。 =Stream。.。of。(。"apple","banana","cherry")。;
3. 常见的 Stream 操作。
- Stream API 提供两种操作:中间操作。和。终止操作。。
3.1 中间操作。
惰性操作(中间操作;Lazy),它们不会立即执行,在触发终止操作之前,,整个流程的计算将开始实施。常见的中间操作包括:
filter。:用于过滤流中的元素,返回合格元素。
List。list。 =Arrays。.。asList。(。"apple","banana","cherry","date")。;List。filteredList。 =list。.。stream。(。)。.。filter。(。s。 ->s。.。startsWith。(。"a")。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。filteredList。)。;// 输出: [apple]。
map。:通过函数将流中的元素转换为另一种元素(通常是映射操作)。
List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;List。upperCaseList。 =list。.。stream。(。)。.。map。(。String。::。toUpperCase。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。upperCaseList。)。;// 输出: [APPLE, BANANA, CHERRY]。
distinct。:去除重复元素。
List。list。 =Arrays。.。asList。(。"apple","banana","apple","cherry")。;List。distinctList。 =list。.。stream。(。)。.。distinct。(。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。distinctList。)。;// 输出: [apple, banana, cherry]。
sorted。:对流中的元素进行排序。
List。list。 =Arrays。.。asList。(。"banana","apple","cherry")。;List。sortedList。 =list。.。stream。(。)。.。sorted。(。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。sortedList。)。;// 输出: [apple, banana, cherry]。
flatMap。:将流中的每个元素映射成多个元素,然后将所有这些元素合并成一个流。
List。>listOfLists。 =Arrays。.。asList。(。Arrays。.。asList。(。"apple","banana")。,Arrays。.。asList。(。"cherry","date")。)。;List。flatMappedList。 =listOfLists。.。stream。(。)。.。flatMap。(。List。::。stream。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。flatMappedList。)。;// 输出: [apple, banana, cherry, date]。
3.2 终止操作。
终止操作是激活流计算的操作,调用终止操作时,流量将开始并计算。常见的终止操作包括:
collect。:收集流中的元素,是最常用的终止操作。
List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;List。result。 =list。.。stream。(。)。.。collect。(。Collectors。.。toList。(。)。)。;System。.。out。.。println。(。result。)。;// 输出: [apple, banana, cherry]。
forEach。:操作对流中的每个元素,通常用于打印。
List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;list。.。stream。(。)。.。forEach。(。System。.。out。::。println。)。;// 输出:。// apple。// banana。// cherry。
reduce。:用于累积或合并对流中的元素,通常用于求和、求最小值或求最大值。
List。numbers。 =Arrays。.。asList。(。1。,2。,3。,4。,5。)。;int。sum。 =numbers。.。stream。(。)。.。reduce。(。0,Integer。::。sum。)。;System。.。out。.。println。(。sum。)。;// 输出: 15。
anyMatch。:检查流中的任何元素是否符合指定条件。
List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;boolean。hasApple。 =list。.。stream。(。)。.。anyMatch。(。s。 ->s。.。equals。(。"apple")。)。;System。.。out。.。println。(。hasApple。)。;// 输出: true。
allMatch。:检查流中的所有元素是否符合指定条件。
List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;boolean。allStartWithA。 =list。.。stream。(。)。.。allMatch。(。s。 ->s。.。startsWith。(。"a")。)。;System。.。out。.。println。(。allStartWithA。)。;// 输出: false。
count。:计算流中元素的数量。
List。list。 =Arrays。.。asList。(。"apple","banana","cherry")。;long。count。 =list。.。stream。(。)。.。count。(。)。;System。.。out。.。println。(。count。)。;// 输出: 3。
4. Stream 并行操作。
- Stream 还提供了。并行流。,它可以将计算任务分配到多个线程以加速处理。在调用。
parallel()。
方法后,流量操作将在多个线程中并行执行,从而提高大数据处理的性能。
List。numbers。 =Arrays。.。asList。(。1。,2。,3。,4。,5。,6。)。;int。sum。 =numbers。.。parallelStream。(。)。.。reduce。(。0,Integer。::。sum。)。;System。.。out。.。println。(。sum。)。;// 输出: 21。
- 并行流适用于数据量大的场景,但由于线程管理的成本,小数据集可能会降低性能。所以,需要根据具体情况来判断是否使用并行流。