流API--流的迭代
来源:互联网 发布:大连外国语大学网络课 编辑:程序博客网 时间:2024/06/10 09:43
虽然流不是数据存储对象,但是仍然可以使用迭代器来遍历其元素,就如同使用迭代器遍历集合中的元素一样。
流API支持2类迭代器,一类是传统的Iterator,另一类是JDK8新增的Spliterator。
关于这几个方法,我们来看下几个重要的API好了:
tryAdvance(Consumer<? super T> action) :对流中的元素进行迭代,只要该方法返回true,就会对下一个元素执行操作,如果该方法返回false,迭代就完成了。可以理解成为interator接口中hasNext和next方法的合并体,而且还提供了迭代性能。
forEachRemaining(Consumer<? super T> action) :将各个元素作为一个整体来应用操作,并不是一次处理一个元素。注意,使用这个方法,不需要提供一个循环来一次处理一个元素。具体看下面的代码:
trySplit() :它将被迭代的元素划分成2部分,返回其中一部分的Spliterator,另一部分通过原来的Spliterator访问。如果无法拆分调用Spliterator,返回null
流API支持2类迭代器,一类是传统的Iterator,另一类是JDK8新增的Spliterator。
- 对流使用传统的迭代器
public static void main(String[] args) throws Exception{List<Double> list = new ArrayList<>(4);list.add(1.1);list.add(2.5);list.add(3.0);list.add(4.8);Iterator<Double> iterator = list.parallelStream().iterator();while (iterator.hasNext()){System.out.println(iterator.next());}}
- 使用spliterator
public static void main(String[] args) throws Exception{List<Double> list = new ArrayList<>(4);list.add(1.1);list.add(2.5);list.add(3.0);list.add(4.8);System.out.println("----研究下tryAdvance+forEachRemaining的用法----");Spliterator<Double> spliterator = list.parallelStream().spliterator();//while (spliterator.tryAdvance(System.out::println));//tryAdvance方法是hasNext()和next()方法的结合体while (spliterator.tryAdvance(System.out::println)){System.out.println("下面显示流中剩余的字符串");//将各个元素作为一个整体来应用操作spliterator.forEachRemaining(System.out::println);}System.out.println("------现在来研究下trySplit的拆分----------");List<Double> list1 = new ArrayList<>(4);list1.add(1.1);list1.add(2.5);list1.add(3.0);list1.add(4.8);Spliterator<Double> spliterator1 = list1.parallelStream().spliterator();//trySplit返回对拆分后的一部分的引用Spliterator<Double> trySplit1 = spliterator1.trySplit();if (Objects.nonNull(trySplit1)){//访问新的生成的迭代器的一部分元素trySplit1.forEachRemaining(System.out::println);}System.out.println("====访问原来的流中剩下的一部分元素=======");spliterator1.forEachRemaining(System.out::println);}
关于这几个方法,我们来看下几个重要的API好了:
tryAdvance(Consumer<? super T> action) :对流中的元素进行迭代,只要该方法返回true,就会对下一个元素执行操作,如果该方法返回false,迭代就完成了。可以理解成为interator接口中hasNext和next方法的合并体,而且还提供了迭代性能。
forEachRemaining(Consumer<? super T> action) :将各个元素作为一个整体来应用操作,并不是一次处理一个元素。注意,使用这个方法,不需要提供一个循环来一次处理一个元素。具体看下面的代码:
public static void main(String[] args) throws Exception{List<Double> list = new ArrayList<>(4);list.add(1.1);list.add(2.5);list.add(3.0);list.add(4.8);list.parallelStream().spliterator().forEachRemaining(System.out::println);System.out.println("这2种效果一样的。。。");List<Double> list1 = new ArrayList<>(4);list1.add(1.1);list1.add(2.5);list1.add(3.0);list1.add(4.8);Spliterator<Double> spliterator = list1.parallelStream().spliterator();while (spliterator.tryAdvance(System.out::println));}
trySplit() :它将被迭代的元素划分成2部分,返回其中一部分的Spliterator,另一部分通过原来的Spliterator访问。如果无法拆分调用Spliterator,返回null
0 0
- 流API--流的迭代
- Flink流处理之迭代API分析
- IO流File的迭代
- 打造属于自己的支持版本迭代的Asp.Net Web Api Route
- 迭代的概念
- 迭代的应用
- 迭代的应用
- map的迭代
- 函数的迭代
- HashMap的迭代
- Python的迭代
- Map的迭代
- 函数的迭代
- Map的迭代
- Map的迭代
- Flink流处理之迭代案例
- Flink流处理之迭代任务
- 迭代开发的新思想
- 关于Win32API(主要是一个宏观上分类)
- 第十一周项目1--二叉树算法验证(1)
- 【前端性能】必须要掌握的原生JS实现JQuery
- Python核心数据类型——数字
- Android Studio 下载地址
- 流API--流的迭代
- 第8周实践项目2 - 建立链串的算法库
- 第十周项目一-建立二叉树算法库
- 第12周 项目1—图基本算法库
- PHP正则表达式屏蔽电话号码中间段
- 第十一周项目1—二叉树算法验证
- 第十周项目3-利用二叉树遍历思想解决问题
- CSS link和@import的区别
- 2015-11-9 java 微信端JSSDK分享实现