在Java中使用Spliterator

介绍:

Java中的迭代器用于遍历给定源的元素。 Java中的Spliterator是四个可用的Java迭代器之一 -Iterator ,Enumeration, ListIteratorSpliterator 它是java.util包中可用的接口。

Spliterator最初是在Java 8中引入的,以支持并行编程。 但是,我们可以将其用于数据项的顺序和并行处理。 要获取Java Spliterator的实例,我们将使用spliterator()方法:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Spliterator splitr = list.spliterator();

我们可以将Java Spliterator视为:

Spliterator = Splitting + Iteration

Spliterator接口定义一些表示其特征的整数常量。 我们的实例可以具有以下八个特征中的一个或多个:

  • SIZED –能够在调用estimateSize()方法时返回源中确切数量的元素
  • SUBSIZED –当我们使用trySplit ()拆分实例并获得SIZED SplitIterators时
  • ORDERED –在有序序列上迭代
  • 分类 -遍历一个排序序列
  • NONNULL –源保证不具有
  • DISTINCT-我们的源序列中不存在重复项
  • IMMUTABLE –如果我们无法在结构上修改元素源
  • 并发 -元素源可以同时安全地修改

我们可以使用int Characteristics ()方法来查询我们的Spliterator实例的特征。 它为我们的Spliterator返回所有合格特征值的OR'ed值。 对于我们定义的splitr ,我们将有:

int charactersticsORed = splitr.characteristics(); //16464

我们可以使用boolean hasCharacteristics(int特征)方法来检查我们的实例是否具有给定的特征

boolean isSized = splitr.hasCharacteristics(Spliterator.SIZED);   //true
boolean isSorted = splitr.hasCharacteristics(Spliterator.SORTED); //false 
boolean isNonNull = splitr.hasCharacteristics(Spliterator.NONNULL); //false

estimateSize()方法返回要迭代的剩余元素的估计数量。 如果该值无限大,未知或计算成本太高,则返回Long.MAX_VALUE 。 对于SIZED拆分器,它返回一个值,该值与成功遍历中遇到的元素数完全对应:

long estimatedSize = splitr.estimateSize(); // 5

这只是一个方便的方法,如果它是SIZED Spliterator或返回-1 ,则返回estimateSize()

long size = splitr.getExactSizeIfKnown(); // 5

tryAdvance()方法的签名如下所示:

default boolean tryAdvance(Consumer<? super T> action)

SpliteratortryAdvance()方法结合了hasNext()next()运营商呈现在碱性迭代器 。 因此,如果存在剩余元素,它将对它执行给定的操作,并返回true;否则,返回true。 否则返回false 换句话说, 它对序列中的下一个元素执行操作 ,然后使迭代器前进。

while(splitr.tryAdvance((item) -> System.out.println(item)));

如果我们有ORDERED Spliterator则按遇到顺序对下一个元素执行操作。

forEachRemaining(Consumer <?superT> action)方法在当前线程中依次为每个剩余元素执行给定操作,直到所有元素都已处理或该操作引发异常:

splitr.forEachRemaining(item -> System.out.println(item));

当前的默认实现重复调用tryAdvance(),直到返回false为止。

如果可以进行分区,则trySplit()方法将拆分调用方的Spliterator并返回对该Spliterator覆盖元素的引用,该元素在从此方法返回时不会被此Spliterator覆盖。 否则,它返回null

因此,在成功拆分之后,原始的Spliterator将在序列的一部分上进行迭代,而返回的Spliterator将在序列的另一部分上进行迭代。

同样, 返回的Spliterator包含初始ORDERED Spliterator的元素的严格前缀(例如,在List上

// trySplit() method over ORDERED splitr
Spliterator<Integer> splitrNew = splitr.trySplit(); // Elements in our splitrNew = {1, 2, 3}
if(splitrNew != null) { splitrNew.forEachRemaining((n) -> System.out.println(n)); 
} // Elements in our splitr - {4 , 5}
splitr.forEachRemaining((n) -> System.out.println(n));

除非我们原始的Spliterator表示无限序列,否则对trySplit()的重复调用最终必须返回null

如果我们有一个由比较器 排序的分隔器 ,它将返回该比较器 。 否则,如果源以自然顺序排序,则返回null对于未排序的源,它将抛出IllegalStateException

因此,对于我们的示例,我们有:

Comparator<Integer> comparator = splitr.getComparator(); //throws IllegalStateException

为什么要使用Spliterator?

Java Spliterator为我们提供了以下优点:

  • 支持并行编程
  • 我们可以将其用于数据项的顺序和并行处理
  • tryAdvance ()方法结合了简单迭代器的 next()hasNext()操作,因此可提供更好的性能

同样,重要的是要意识到,分离器对于CollectionStream源都可以正常工作,但不适用于Map实现。

结论:

在本文中,我们向您介绍了Java的Spliterator接口。 我们介绍了此界面中可用的不同默认方法以及如何使用它们。

成为第一个发表评论的人。

翻译自: https://www.javacodegeeks.com/2019/04/using-spliterator-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/342909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zigbee如何在智能家居中成为领先的连接技术?

ZigBee技术是一种近距离、低复杂度、低功耗、低速率、低成本的双向无线通讯技术。主要用于距离短、功耗低且传输速率不高的各种电子设备之间进行数据传输以及典型的有周期性数据、间歇性数据和低反应时间数据传输的应用。 ZigBee建立在802.15.4标准之上&#xff0c;它确定了可以…

计算机启动完成后操作系统负责管理的是,终极:如果计算机启动后无法进入系统,旧驱动程序会教您如何处理...

为什么计算机无法启动进入系统&#xff1f;如何解决开机后电脑无法进入系统的问题&#xff1f;以下编辑器将为您详细介绍如何解决启动后计算机无法进入系统的问题。众所周知&#xff0c;长时间使用计算机时&#xff0c;会出现一种或另一种问题。引导后无法进入系统的问题是最常…

【渝粤教育】国家开放大学2018年秋季 0267-21T摄影技术 参考试题

试卷编号&#xff1a;0273 座位号 2018——2019学年度第一学期期末考试 中国现代文学 试题 2019年1月 1&#xff0e;闻一多分别于1923年和1928年出版了两部诗集&#xff0c;第一部是《__________》&#xff0c;第二部是《___________》。 2&#xff0e;《__________》是鲁迅唯…

业界对物联网技术最常见的三大误区解读

各行各业都在借助数字化东风进行转型&#xff0c;制造业也不例外。智能工厂、大数据、物联网、人工智能……新兴技术在制造业领域焕发着巨大价值。然而对于物联网技术&#xff0c;很多企业依然抱有观望&#xff0c;甚至谨慎的态度。现在我们一起看看业界对这种技术的最常见误区…

【渝粤教育】国家开放大学2018年秋季 0434-22T高级英语口语 参考试题

科目编号&#xff1a;[0471] 座位号 2018-2019学年度第一学期期末考试 畜牧学 试题 2018年 11 月 一、名词解释&#xff08;本大题共5小题&#xff0c;每小题4分&#xff0c;共计20分&#xff09; 1.热增耗 2&#xff0e;能量饲料 3&#xff0e;胴体 4&#xff0e;同步发情…

电话光端机应用范围解析!电话光端机主要应用在哪些领域?

电话光端机刚进入安防领域时&#xff0c;称得上是当时的新贵。由于那时光纤通信的应用还未普及&#xff0c;别说行业内许多人没有看到过光端机&#xff0c;只怕没听说过的人也不在少数。那时候的光端机是十分昂贵的&#xff0c;因此也显得十分神秘。当然&#xff0c;它的性能优…

办公室文员计算机应用考试试题,办公室人员考试习题及答案.doc

办公室人员考试习题及答案一、文员办公室管理1&#xff0e;以下哪点不是办公室事务管理的特征A&#xff0e;服务性 B&#xff0e;决策性 C&#xff0e;专业性 D&#xff0e;主动性 A&#xff0e;准备一些敞开的文件夹&#xff0c;贴上相应的标识条B&#xff0e;办公桌抽屉物品要…

Zigbee费尽心思做mesh网究竟在智能家居中有什么用?

在物联网蓬勃发展的浪潮下&#xff0c;智能家居的热度也随之不断升温。由于智能家居的安全、节能、舒适、便利、高效等诸多特点&#xff0c;越来越多的客户开始接受和开发智能家居单品和系统。在中国推广Zigbee技术的这几年里&#xff0c;我有幸看到来自中国的厂家在物联网和智…

【渝粤教育】国家开放大学2018年秋季 0630-21T环境法学 参考试题

科目编号&#xff1a;0633 座位号&#xff1a; 2018-2019学年度第一学期期末考试 化工CAD试题 2019年1月 一、试题一&#xff08;本题50分&#xff09; 设置绘图环境并绘制如下图框标题栏并保存。 二、试题二&#xff08;本题50分&#xff09; 调用图框绘一个平面图形标注…

【渝粤教育】国家开放大学2018年秋季 0699-22T阅读与写作 参考试题

试卷编号&#xff1a;0704 2018——2019学年度第遗产学期期末考试 法律基础与实务 试题答案及评分标准 2019年1月 一、单项选择题&#xff08;每小题4分&#xff0c;共40分&#xff09; 1&#xff0e;B 2&#xff0e;A 3&#xff0e;D 4&#xff0e;B 5&#xff0e;C 6. A 7. B…

为什么要使用工业以太网交换机?

以太网技术得到很大的提高&#xff0c;并且被公司和大学办公室所接受&#xff0c;现在正逐步的拓展有更多需求的工业环境应用。工业以太网交换机的的吸引力包括监视数据传输&#xff0c;被用来建立和配置设备的现存实用工具 &#xff0c;还有可以从某个中心位置可以安装控制设备…

高低温湿热试验箱使用的注意事项

高低温湿热试验箱不要放在阳光直接照射或其他热源直接辐射的场所。不要放置在灰尘多、有腐蚀性或可燃性气体的环境中。不要放置在有振动的地方。不要离壁面太近&#xff0c;以免通风不良。应在环境温度15℃&#xff5e;35℃&#xff0c;相对湿度&#xff1a;不大于85%内使用。高…

计算机信息系统集成资质二级 列表6,计算机信息系统集成资质等级二级

计算机信息系统集成资质等级二级信息系统集成项目就是从客户和用户的需求出发&#xff0c;将硬件、系统软件、工具软件、网络、数据库及相关应用的应用软件集成为实用的信息系统的过程。系统集成的本质就是最优化的综合统筹设计&#xff0c;一个大型的综合计算机网络系统&#…

java生日快乐_Java八岁生日快乐!

java生日快乐这是又一次漫长的旅程&#xff0c;但是昨天&#xff0c;恰好是Java 7发布两年零七个月零十八天之后&#xff0c;我们现在有了可用于生产的构建 Java 8可供下载 &#xff01; 这个新的主要版本包含一些新功能和增强功能&#xff0c;这些功能和增强功能可以提高现有…

【渝粤教育】国家开放大学2018年秋季 0727-21T思想道德修养与法律基础 参考试题

试卷编号&#xff1a;0734 2018——2019学年度第一学期期末考试 出纳实务试题答案及评分标准 2019年1月 一、单项选择题&#xff08;每小题5分&#xff0c;共25分&#xff09; 1.A 2. C 3. A 4. B 5.D 二、多项选择题&#xff08;每小题5分&#xff0c;共25分&#xff09; 1、…

物联网在医疗保健中的应用

数字健康革命分为四个部分&#xff0c;即&#xff1a; 1、 获取信息(互联网时代) 2、 相互访问(社交网络) 3、 接触自己(通过移动和可穿戴健康技术量化自我) 4、 了解每一个人(大数据的后续开发和应用) 有趣的是&#xff0c;这实际上是由五部分组成的数字革命&#xf…

影响PoE交换机不稳定的因素

PoE交换机带有供电设备&#xff0c;给使用现场带来了便利&#xff0c;也使PoE交换机得到广泛的应用&#xff0c;但是不少使用商会反应自己使用的PoE交换机不稳定。那么&#xff0c;不稳定的因素到底有那些呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来看看吧&#xff01…

【渝粤教育】国家开放大学2018年秋季 1080t工程数学(本) 参考试题

试卷代号&#xff1a;1098 中学数学教学研究 试题&#xff08;半开卷&#xff09; 2019年1月 一、填空题&#xff08;本题共20分&#xff0e;每个空2分&#xff09; 1&#xff0e;“矩形”这个数学概念的内涵和外延分别是_____________________________________ 和____________…

详解 | 引起电源模块发热的4个主要原因

一摸电源模块的表面&#xff0c;热乎乎的&#xff0c;模块坏了&#xff1f;且慢&#xff0c;有一点发热&#xff0c;仅仅只是因为它正努力地工作着。但高温对电源模块的可靠性影响极其大&#xff01;基于电源模块热设计的知识&#xff0c;这一次&#xff0c;我们扒一扒引起电源…

计算机表格文件打不开,我的电脑表格文件都打不开了怎么回事,请高手支个招,谢谢!...

我的电脑表格文件都打不开了怎么回事&#xff0c;请高手支个招&#xff0c;谢谢&#xff01;以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;我的电脑表格文件都打不开了怎么回事&#xff0c…