java8 stream接口 终端操作 forEachOrdered和forEach

对于中间操作和终端操作的定义,请看《JAVA8 stream接口 中间操作和终端操作》

这篇开始介绍java8的终端操作,以及forEachOrdered和forEach;先看下这个函数的定义

void forEach(Consumer<? super T> action);  
  
void forEachOrdered(Consumer<? super T> action);

这两个函数都是对集合的流,进行遍历操作,是属于内部迭代;传入一个Consumer的函数接口,关于consumer的定义请看《JAVA8 Consumer接口》;下面通过案例,简单了解下:

List<String> strs = Arrays.asList("a", "b", "c");
        strs.stream().forEachOrdered(System.out::print);//abc
        System.out.println();
        strs.stream().forEach(System.out::print);//abc
        System.out.println();
        strs.parallelStream().forEachOrdered(System.out::print);//abc
        System.out.println();
        strs.parallelStream().forEach(System.out::print);//bca

先看第一段输出和第二段输出,使用的是stream的流,这个是一个串行流,也就是程序是串行执行的,所有看到遍历的结果都是按照集合的元素放入的顺序;

看第三段和第四段输出,使用的parallelStream的流,这个流表示一个并行流,也就是在程序内部迭代的时候,会帮你免费的并行处理,关于java8的并行处理,会在后期为大家介绍;

第三段代码的forEachOrdered表示严格按照顺序取数据,forEach在并行中,随机排列了;这个也可以看出来,在并行的程序中,如果对处理之后的数据,没有顺序的要求,使用forEach的效率,肯定是要更好的

上一篇《JAVA8 stream接口 distinct,sorted,peek,limit,skip》  下一篇《java8 stream接口 终端操作 toArray操作》




猜你喜欢

转载自blog.csdn.net/qq_28410283/article/details/80782808