Java Stream流获取与常用操作
85 浏览量
更新于2024-08-29
收藏 51KB PDF 举报
本文主要介绍了Java中的Stream流及其常用方法,包括如何获取Stream流、以及对foreach循环的使用。
在Java 8引入的Stream API是一种处理数据的新方式,它允许我们以声明性的方式处理集合数据。Stream API可以方便地进行过滤、映射、归约等操作,特别适合于并行计算。
1. 获取Stream流
- 所有实现了Collection接口的集合类(如ArrayList、LinkedList、HashSet等)都提供了`stream()`方法,可以直接将集合转换为Stream流。例如:
```java
ArrayList<String> list = new ArrayList<>();
Stream<String> stream = list.stream();
```
- Stream类提供了两个静态工厂方法:`of(T... t)` 和 `of(T t)`,用于创建特定类型的Stream。例如:
```java
Stream<String> stringStream = Stream.of("灵台方寸山", "斜月三星洞");
String[] arr = {"为天地立心", "为生民立命", "为往圣继绝学", "为万世开太平"};
Stream<String> arrStream = Stream.of(arr);
```
- 对于Map,可以获取其键的Set(`keySet().stream()`)、值的Collection(`values().stream()`)或者Entry Set(`entrySet().stream()`)的Stream流。
2. foreach循环
Stream API提供了一个`forEach(Consumer<T> action)`方法,用于遍历Stream中的每个元素并执行一个操作。例如:
```java
stream.forEach(System.out::println);
```
这个例子中,`System.out::println`是一个方法引用,相当于传递了一个Consumer,用来消费Stream中的每个元素。
3. 其他常用方法
- `filter(Predicate<T> predicate)`:根据给定的条件过滤元素。
- `map(Function<T, R> mapper)`:将Stream中的每个元素应用一个函数,返回一个新的Stream。
- `distinct()`:移除重复的元素。
- `sorted()`:对Stream进行排序。
- `limit(long maxSize)`:限制Stream的大小,仅保留前maxSize个元素。
- `skip(long n)`:跳过前n个元素。
- `collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner)`:将Stream中的元素聚合到一个结果容器中,如列表、集合并等。
4. 并行流与并行计算
Stream API支持并行流(`parallelStream()`),可以利用多核处理器进行并行计算,提高处理效率。但需要注意,使用并行流时需考虑线程安全和数据一致性问题。
5. 终结操作
- `count()`:返回Stream中元素的数量。
- `findFirst()`:找到Stream中的第一个元素。
- `anyMatch(Predicate<T> predicate)`:检查是否存在满足条件的元素。
- `allMatch(Predicate<T> predicate)`:检查所有元素是否都满足条件。
- `noneMatch(Predicate<T> predicate)`:检查是否有元素不满足条件。
- `reduce(BinaryOperator<T> accumulator)`:对Stream中的元素进行归约操作,如求和、求最大值等。
通过这些方法,Stream API为我们提供了强大的数据处理能力,使得Java程序员能够更加优雅地处理数据,特别是在大数据和并行计算的场景下。了解并熟练掌握这些方法,能显著提升代码的可读性和效率。
2020-09-02 上传
2023-05-31 上传
2024-12-21 上传
2024-12-21 上传
2024-12-21 上传
2024-12-21 上传
weixin_38717359
- 粉丝: 7
- 资源: 904
最新资源
- JavaScript实现的高效pomodoro时钟教程
- CMake 3.25.3版本发布:程序员必备构建工具
- 直流无刷电机控制技术项目源码集合
- Ak Kamal电子安全客户端加载器-CRX插件介绍
- 揭露流氓软件:月息背后的秘密
- 京东自动抢购茅台脚本指南:如何设置eid与fp参数
- 动态格式化Matlab轴刻度标签 - ticklabelformat实用教程
- DSTUHack2021后端接口与Go语言实现解析
- CMake 3.25.2版本Linux软件包发布
- Node.js网络数据抓取技术深入解析
- QRSorteios-crx扩展:优化税务文件扫描流程
- 掌握JavaScript中的算法技巧
- Rails+React打造MF员工租房解决方案
- Utsanjan:自学成才的UI/UX设计师与技术博客作者
- CMake 3.25.2版本发布,支持Windows x86_64架构
- AR_RENTAL平台:HTML技术在增强现实领域的应用