前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spliterator

Spliterator

作者头像
阿超
发布2022-08-17 19:47:29
1570
发布2022-08-17 19:47:29
举报
文章被收录于专栏:快乐阿超

如果工作对于人类不是人生强索的代价,而是目的,人类将是多么幸福——罗丹

我们操作集合同样可以使用Spliterator

Stream子类ReferencePipeline的构造函数中需要传入Spliterator

代码语言:javascript
复制
// 生成0-99的元素
List<Integer> list = Stream.iterate(0, i -> i < 100, i -> ++i).toList();
// 获取集合的Spliterator
Spliterator<Integer> spliterator = list.spliterator();
// 通过Spliterators获取
Spliterator<String> spliterator1 = Spliterators.spliterator(Collections.singleton("xxx"), 0);
// 按顺序消费元素,返回值表示是否还有下一个
boolean b = spliterator.tryAdvance(x -> System.out.println("消费第一个元素:" + x));
System.out.println("是否还有下一个:" + b);
spliterator.tryAdvance(x -> System.out.println("消费第二个元素:" + x));
// trySplit为拆分元素,调用一次拆分为原来 未消费时 的一半
Spliterator<Integer> trySplit = spliterator.trySplit();
// 按顺序消费原来的一半,因为上面已经消费掉了,因此从3开始
trySplit.forEachRemaining(System.out::println);
System.out.println("剩余元素个数,如果无法计算,则返回-1:" + spliterator.getExactSizeIfKnown());
System.out.println("剩下那一半");
spliterator.forEachRemaining(System.out::println);
System.out.println("剩余元素个数,此处无限流情况下返回9223372036854775807,一般使用getExactSizeIfKnown:" + spliterator.estimateSize());
// 获取spliterator的比较器
System.out.println("比较器:" + Stream.iterate(0, i -> ++i).sorted().spliterator().getComparator());

// 判断是否包含某个特征,计算方式是使用本身特征与传入特征进行与运算,得到的结果与传入特征值判断characteristics
System.out.println("是否包含Spliterator.SIZED:" + spliterator.hasCharacteristics(Spliterator.SIZED));
// 获取spliterator的特征值
System.out.println("spliterator的特征值" + spliterator.characteristics());
// 将spliterator转换为Stream流
StreamSupport.stream(spliterator, false);
// 将spliterator转换为Stream并行流
StreamSupport.stream(spliterator, true);

然后是其中包含的一些特征

代码语言:javascript
复制
// 是否有序
   public static final int ORDERED    = 0x00000010;
// 是否去重
   public static final int DISTINCT   = 0x00000001;
// 是否手动排序过
   public static final int SORTED     = 0x00000004;
// 是否可数(如无限流不可数)
   public static final int SIZED      = 0x00000040;
// 元素是否不能为空
   public static final int NONNULL    = 0x00000100;
// 是否不能添加、替换或删除元素
   public static final int IMMUTABLE  = 0x00000400;
// 是否线程安全
   public static final int CONCURRENT = 0x00001000;
// 子元素是否可数
   public static final int SUBSIZED = 0x00004000;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档