Java8流是什么?有哪些常用操作?

简介: Java8流是什么?有哪些常用操作?

Java 8 已经推出八年多了,2014 年发布的许多功能已经延续到 2022 年,其中最突出的功能之一是 Java 流。本文我将介绍什么是 Java 流,何时使用它们,流问题怎么解决,并简要介绍常见的 Java 流操作。

什么是是 Java 中的流?

Java 流支持对元素流进行函数式操作,流是按某种顺序应用于数据的不可变函数集合的抽象,流不是可以存储元素的集合。

流和结构之间最重要的区别是流不保存数据,例如,您不能指向流中存在特定元素的位置,您只能指定对该数据进行操作的函数,并且在对一个流进行操作时,会影响到原来的流。

请注意,不要将本文中的流与 Java I/O 包中的流(如 InputStream、OutputStream 等)混淆。

何时使用 Java 流

Java 流表示数据流经的管道以及对数据进行操作的函数,此实例中的管道由流源、后跟零个或多个中间操作和终端操作组成。

因此,流可用于任何数量的涉及数据驱动功能的应用程序。

Java流的特点

  • 流不是数据结构,而是从集合、数组或 I/O 通道获取输入。
  • 流不改变原始数据结构,它们只根据流水线方法提供结果。
  • 每个中间操作都被延迟执行并返回一个流作为结果,因此可以流水线化各种中间操作。终端操作标记流的结尾并返回结果。

流上的不同操作

中间操作:

  • map: map 方法用于返回一个流,该流由将给定函数应用于此流的元素的结果组成。
  • filter: filter 方法用于根据作为参数传递的 Predicate 选择元素。
  • sorted: sorted方法用于对流进行排序。

末端操作:

  • collect: collect 方法用于返回对流执行的中间操作的结果。
  • forEach: forEach 方法用于遍历流中的每个元素。
  • reduce: reduce 方法用于将流的元素减少为单个值。

代码示例

1、过滤

  • 用于根据条件从 Collection 中删除值。
  • filter()方法用于根据条件过滤 Collection 的元素。只保留匹配的元素。

过滤出所有奇数:

List<Integer> nums = numList.stream()
        .filter(n -> n % 2 != 0)
        .collect(Collectors.toList());

2、预处理

  • 集合中的每个值都需要就地更改时很有用。
  • map()方法用于将函数应用于 Collection 的每个元素并返回计算值的新 Collection。

将数字加1:

List<Integer> newNums = nums.stream()
        .map(n -> n + 1)
        .collect(Collectors.toList());

3、排序

  • 对 Collection 的元素进行排序。
  • sorted()方法用于对 Collection 的元素进行排序。

通常,Collections.sort() 足以对集合进行排序。如果我们想在它后面进行另一个操作,我们可以专门使用 sorted() 。

List<Integer> newNums = nums.stream()
        .sorted()
        .collect(Collectors.toList());
目录
相关文章
|
8月前
|
人工智能 监控 数据挖掘
2025年有哪些工单管理系统值得推荐?
随着企业数字化转型加速,工单管理系统成为优化流程、提升服务的关键工具。2025年备受关注的主流系统包括:合力亿捷,中国移动,中国联通,中国电信等
195 0
|
12月前
|
Linux C# Android开发
分享3款开源、免费的Avalonia UI控件库
分享3款开源、免费的Avalonia UI控件库
1196 0
|
运维 关系型数据库 MySQL
阿里 P7 到底是怎样的水平?
大家好,我是锋哥,今天分享我楼仔兄弟的一篇好文,希望对大家有帮助 ! 前几天二哥找我,问我阿里 P7 是怎样的水平,在面试中如何才能拿到阿里 P7 的职级。
|
安全 Linux 网络安全
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
118116 0
|
人工智能
【豆包】——猜三国人物——调试过程
【豆包】——猜三国人物——调试过程
715 0
【豆包】——猜三国人物——调试过程
|
前端开发 JavaScript
使用 JavaScript 获取 URL 参数的详细指南
【2月更文挑战第26天】
13951 2
使用 JavaScript 获取 URL 参数的详细指南
|
XML JavaScript 前端开发
XML DOM 节点信息
XML DOM用于处理节点信息,包括nodeName(节点名)、nodeValue(节点值)和nodeType(节点类型)。示例展示了如何使用这些属性加载XML文件、获取元素节点名称、提取及修改文本内容。节点有三种关键属性:nodeName表示节点名,nodeValue获取或设置节点值,nodeType指示节点类型,如元素(1)、属性(2)、文本(3)、注释(8)和文档(9)。
|
中间件
express学习1-错误处理中间件
express学习1-错误处理中间件
580 79
express学习1-错误处理中间件