宁波网站建,科技元素logo设计,深圳龙岗属于什么风险,微信做购物网站怎么抽佣Java中Stream流的详细使用介绍 **1. 创建 Stream**从集合创建从数组创建使用 Stream.of 创建创建无限流 **2. 中间操作**过滤#xff1a;filter映射#xff1a;map去重#xff1a;distinct排序#xff1a;sorted截取#xff1a;limit 和 skip **3. 终端操作**收集#xf… Java中Stream流的详细使用介绍 **1. 创建 Stream**从集合创建从数组创建使用 Stream.of 创建创建无限流 **2. 中间操作**过滤filter映射map去重distinct排序sorted截取limit 和 skip **3. 终端操作**收集collect遍历forEach匹配anyMatch、allMatch、noneMatch计数count聚合reduce **4. 并行流****5. 常用工具类Collectors**转换为列表toList转换为集合toSet转换为映射toMap连接字符串joining **6. 示例代码****总结** 在 JDK 8 中
Stream 是 Java 集合操作的一个强大工具它允许以声明式的方式处理数据集合如过滤、映射、排序、聚合等。
Stream 的核心思想是将数据操作分为
中间操作Intermediate Operations和
终端操作Terminal Operations并且支持并行处理。 1. 创建 Stream
可以通过多种方式创建 Stream
从集合创建
ListString list Arrays.asList(a, b, c);
StreamString stream list.stream();从数组创建
String[] array {a, b, c};
StreamString stream Arrays.stream(array);使用 Stream.of 创建
StreamString stream Stream.of(a, b, c);创建无限流
StreamInteger infiniteStream Stream.iterate(0, n - n 1); // 从 0 开始每次加 1
StreamDouble randomStream Stream.generate(Math::random); // 生成随机数流2. 中间操作
中间操作返回一个新的 Stream可以链式调用。
过滤filter
ListString list Arrays.asList(apple, banana, cherry);
ListString result list.stream().filter(s - s.startsWith(a)) // 过滤以 a 开头的字符串.collect(Collectors.toList());
// 结果[apple]映射map
ListString list Arrays.asList(apple, banana, cherry);
ListInteger result list.stream().map(String::length) // 将字符串映射为其长度.collect(Collectors.toList());
// 结果[5, 6, 6]去重distinct
ListString list Arrays.asList(apple, banana, apple);
ListString result list.stream().distinct() // 去重.collect(Collectors.toList());
// 结果[apple, banana]排序sorted
ListString list Arrays.asList(banana, apple, cherry);
ListString result list.stream().sorted() // 自然排序.collect(Collectors.toList());
// 结果[apple, banana, cherry]截取limit 和 skip
ListInteger list Arrays.asList(1, 2, 3, 4, 5);
ListInteger result list.stream().skip(2) // 跳过前 2 个元素.limit(2) // 只取 2 个元素.collect(Collectors.toList());
// 结果[3, 4]3. 终端操作
终端操作会触发流的处理并返回一个非流的结果。
收集collect
ListString list Arrays.asList(apple, banana, cherry);
ListString result list.stream().filter(s - s.startsWith(a)).collect(Collectors.toList());
// 结果[apple]遍历forEach
ListString list Arrays.asList(apple, banana, cherry);
list.stream().forEach(System.out::println);
// 输出
// apple
// banana
// cherry匹配anyMatch、allMatch、noneMatch
ListString list Arrays.asList(apple, banana, cherry);
boolean anyStartsWithA list.stream().anyMatch(s - s.startsWith(a)); // 是否有以 a 开头的
boolean allStartsWithA list.stream().allMatch(s - s.startsWith(a)); // 是否全部以 a 开头
boolean noneStartsWithZ list.stream().noneMatch(s - s.startsWith(z)); // 是否没有以 z 开头的计数count
ListString list Arrays.asList(apple, banana, cherry);
long count list.stream().filter(s - s.startsWith(a)).count();
// 结果1聚合reduce
ListInteger list Arrays.asList(1, 2, 3, 4, 5);
int sum list.stream().reduce(0, Integer::sum); // 求和
// 结果154. 并行流
通过 parallelStream() 或 stream().parallel() 可以将流转换为并行流利用多核处理器加速处理。
ListString list Arrays.asList(apple, banana, cherry);
ListString result list.parallelStream().filter(s - s.startsWith(a)).collect(Collectors.toList());
// 结果[apple]5. 常用工具类Collectors
Collectors 提供了丰富的工具方法用于将流转换为集合或其他数据结构。
转换为列表toList
ListString list Arrays.asList(apple, banana, cherry);
ListString result list.stream().collect(Collectors.toList());转换为集合toSet
SetString set list.stream().collect(Collectors.toSet());转换为映射toMap
MapString, Integer map list.stream().collect(Collectors.toMap(s - s, String::length));
// 结果{apple: 5, banana: 6, cherry: 6}连接字符串joining
String joined list.stream().collect(Collectors.joining(, ));
// 结果apple, banana, cherry6. 示例代码
以下是一个完整的示例展示 Stream 的常见用法
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class StreamExample {public static void main(String[] args) {ListString list Arrays.asList(apple, banana, cherry, date);// 过滤、映射、排序、收集ListString result list.stream().filter(s - s.length() 4) // 过滤长度大于 4 的字符串.map(String::toUpperCase) // 转换为大写.sorted() // 排序.collect(Collectors.toList()); // 收集为列表System.out.println(result); // 输出[APPLE, BANANA, CHERRY]}
}总结
Stream 提供了一种高效、简洁的方式来处理集合数据。中间操作如 filter、map是惰性的只有在终端操作如 collect、forEach调用时才会执行。并行流可以充分利用多核 CPU 的性能。