>集合流操作
这里的这个流和IO流不一样,是JDK8中对Collection对象功能的加强。
个人认为作为基础,IBM上的>这篇文章<写得已经很好了,已然再无他文可出其右。这里只做一个要点笔记。
>流操作
流操作分为两类:
- Intermediate(转换操作):一个流可以后面跟随零个或多个 intermediate 操作。其目的主要是打开流,做出某种程度的数据映射/过滤,然后返回一个新的流,交给下一个操作使用。这类操作都是惰性化的(lazy),就是说,仅仅调用到这类方法,并没有真正开始流的遍历。
- Terminal(终点操作):一个流只能有一个 terminal 操作,当这个操作执行后,流就被使用“光”了,无法再被操作。所以这必定是流的最后一个操作。Terminal 操作的执行,才会真正开始流的遍历,并且会生成一个结果,或者一个 side effect。
所有的转换操作都是lazy的,lazy是指多次转换操作只会在遇到终点操作之后,才会依次执行。在终点操作之后,流截止,不再允许更多操作。比如:
List<Integer> nums = Arrays.asList(1, 2, 3);
nums.stream().peek(System.out::println).map(x->x*-1).forEach(System.out::println);
输出为: 1 -1 2 -2 3 -3。
>流操作分类
- 【数据集合】 ->【数据源】 - > 若干次(包括0)【转换操作】 ->【终点操作】。
>这篇文章<把常用操作都用图表示出来了,值得记录一下。
转换操作:map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip、 par