java8 排序_使用Java 8轻松实现流程集合

本文介绍了Java8中StreamAPI的使用,它使得处理集合和数组更加高效和简洁。StreamAPI提供了声明式处理数据的方式,支持流创建、中间操作(如过滤、映射、排序)和终端操作(如计数、转换为集合)。通过实例展示了如何通过StreamAPI过滤、映射和统计元素,强调了Stream的非变性和惰性求值特性。
摘要由CSDN通过智能技术生成

在Java中,集合和数组是两种常见的数据结构,定期执行许多操作,包括添加,删除,修改,查询,聚合,统计和过滤。 这些操作也存在于关系数据库中。 但是,在Java 8之前处理集合和数组并不是很方便。

通过引入一个名为Stream API的新抽象,Java 8中的这个问题得到了极大的缓解,它允许我们以声明的方式处理数据。 本文介绍如何使用Stream。 请注意,Stream的性能和原理不是本文的核心部分。


Stream Introduction

Stream通过查询,类似于SQL语句的数据库中的数据,为Java集合操作和表达式提供高级抽象。

Stream API可以显著提高Java程序员的工作效率,并允许他们编写有效,干净和简洁的代码。

要处理的元素集合被视为流,它在流水线中传输。 可以在管道的节点上处理这些元素,例如过滤器,排序和聚合。

Java Streams的特性和优势:

stream不是数据结构,而只是数据源的视图,可以是数组,Java容器或I / O通道。

对流的任何修改都不会更改数据源。 例如,过滤流不会删除已过滤的元素,但会生成不包含过滤元素的新Stream。

Stream上的操作不会立即执行。 只有在用户真正需要结果时才会执行它们。

耗材。 stream的元素仅在stream的生命期间访问过一次。 一旦遍历,Stream就会失效,就像容器迭代器一样。 如果要再次遍历stream,则必须重新生成新stream。

让我们用一个例子来看看Stream可以做什么:

2170b96377bcc4c935df89c471a4250a.png

前面的示例将一些塑料球作为数据源,过滤掉红色的球,将它们融化并将它们转换为随机三角形。 另一个滤镜删除小三角形。 减速器总结了周长

如上图所示,Stream涉及三个关键操作:流创建,中间操作和终端操作。

Stream Creation

在Java 8中,可以使用许多方法来创建Stream。

1. 使用现有集合创建流

除了许多与stream相关的类之外,Java 8还增强了集合类本身。 Java 8中的stream方法可以将集合转换为Stream。

a2ba731c010ebfc7497e28e30eed8f32.png

上面的示例从现有List创建Stream。 此外,parallelStream方法可以为集合创建并行流。

从集合中创建Stream也很常见。

2. 使用流方法创建流

Stream提供的方法可用于直接返回由指定元素组成的Stream。

8bb02d3ca597241334033d6fc13c851d.png

前面的代码使用of方法创建并返回Stream。

流中间操作

Stream可以具有许多中间操作,这些操作可以组合以形成管道。 每个中间操作就像管道上的工人一样。 每个工作人员都可以处理Stream。 中间操作返回一个新的Stream。

filter

过滤方法用于按指定条件过滤元素。 以下代码段使用filter方法过滤空字符串:

62b1ff0dc49228eb00030cd3c7675f53.png

Map

map方法将每个元素映射到其对应的结果。 以下代码段使用map方法生成相应元素的平方数:

563497889859b7edda0852c2121e19da.png

limit/skip

Limit返回Stream中的前N个元素。 跳过放弃Stream中的前N个元素。 以下代码段使用limit方法保留前四个元素:

2dcb4c0811973950db988158ed6bafb2.png

Sorted

已排序的方法对Stream中的元素进行排序。 以下代码段使用sorted方法对Stream元素进行排序:

3d64631ab7e1dcda40cbe4c5dcd458de.png

Distinct

distinct方法用于删除重复项。 以下代码段使用distinct方法来重复删除元素:

7b793d84e58e3462372084abc56dc154.png

接下来,我们使用示例和图来说明在执行操作过滤,映射,排序,限制和区分后流将发生什么。

以下是代码:

e2c672441f19cefbd66acad64f384632.png

流终端操作

流终端操作也返回Stream。 我们如何将Stream转换为所需类型? 例如,计算Stream中的元素并将该Stream转换为集合。 为此,我们需要终端操作。

终端操作将使用Stream并生成最终结果。 也就是说,在对Stream执行终端操作之后,流不可重用,并且不允许在该流上进行任何中间操作。 否则,抛出异常:

ef1a1522a06d5248300aa9976703b662.png

这与“你不能两次踏入同一条河流”的含义相同。

forEach

forEach方法遍历Stream中的元素。 以下代码段使用forEach返回10个随机数:

c381d484708519a58c1c4a7c86f149c8.png

Count

count方法计算Stream中的元素。

699d5cd3b22fbe03553337dcbb869776.png

Summary

本文介绍了Java 8中Streams的用法和特性。本文还介绍了流创建,流中间操作和终端操作。

我们可以使用两种方法来创建Stream:使用Collection的stream方法或使用Stream的方法。

流中间操作可以处理Streams。 中间操作的输入和输出都是Streams。 中间操作包括过滤,映射和排序。

流终端操作可以将Stream转换为其他容器,例如计算Stream中的元素,将Stream转换为集合并迭代Stream中的元素。

5bf4d377d654097143b624eea7e3eb03.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值