经过前面章节的学习,咱们应该明白了Stream管道流的基本操做。咱们来回顾一下:vue
看下面的脑图,能够有更清晰的理解:java
其实在程序员编程中,常常会接触到“有状态”,“无状态”,绝大部分的人都比较蒙。并且在不一样的场景下,“状态”这个词的含义彷佛有所不一样。可是“万变不离其宗”,理解“状态”这个词在编程领域的含义,笔者教给你们几个关键点:程序员
是否是更蒙了?举个例子,你就明白了web
回到咱们的Stream管道流redis
List<String> limitN = Stream.of("Monkey", "Lion", "Giraffe", "Lemur") .limit(2) .collect(Collectors.toList()); List<String> skipN = Stream.of("Monkey", "Lion", "Giraffe", "Lemur") .skip(2) .collect(Collectors.toList());
咱们还可使用distinct方法对管道中的元素去重,涉及到去重就必定涉及到元素之间的比较,distinct方法时调用Object的equals方法进行对象的比较的,若是你有本身的比较规则,能够重写equals方法。spring
List<String> uniqueAnimals = Stream.of("Monkey", "Lion", "Giraffe", "Lemur", "Lion") .distinct() .collect(Collectors.toList());
上面代码去重以后的结果是: ["Monkey", "Lion", "Giraffe", "Lemur"]vuex
默认的状况下,sorted是按照字母的天然顺序进行排序。以下代码的排序结果是:[Giraffe, Lemur, Lion, Monkey],字数按顺序G在L前面,L在M前面。第一位没法区分顺序,就比较第二位字母。编程
List<String> alphabeticOrder = Stream.of("Monkey", "Lion", "Giraffe", "Lemur") .sorted() .collect(Collectors.toList());
排序咱们后面还会给你们详细的讲一讲,因此这里暂时只作一个了解。后端
一般状况下,有状态和无状态操做不须要咱们去关心。除非?:你使用了并行操做。数组
仍是用班级按身高排队为例:班级有一我的负责排序,这个排序结果最后就会是正确的。那若是有2个、3我的负责按大小个排队呢?最后可能就乱套了。一我的只能保证本身排序的人的顺序,他没法保证其余人的排队顺序。
Stream.of("Monkey", "Lion", "Giraffe", "Lemur", "Lion") .parallel() .forEach(System.out::println);
若是数据量比较小的状况下,不太能观察到,数据量大的话,就能观察到数据顺序是没法保证的。
Monkey Lion Lemur Giraffe Lion
一般状况下,parallel()可以很好的利用CPU的多核处理器,达到更好的执行效率和性能,建议使用。可是有些特殊的状况下,parallel并不适合:深刻了解请看这篇文章:
https://blog.oio.de/2016/01/22/parallel-stream-processing-in-java-8-performance-of-sequential-vs-parallel-stream-processing/
该文章中几个观点,说明并行操做的适用场景:
以为对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创做动力! 。另外,笔者最近一段时间输出了以下的精品内容,期待您的关注。