java8--Stream

 大纲:

  1. 简介
  2. 创建流
  3. 中间操作、中止操作
  4. 示例

 

一、简介

Stream操作就是把集合或者数组放进流中,进行一系列链式处理,最终获取结果的一套api。

正常操作流程:

  1. 创建流
  2. 中间操作
  3. 中止操作

 

二、创建流

创建流的操作,返回一个Stream对象

    public static void main(String[] args) throws InterruptedException {
        Arrays.stream(new String[]{"a", "b", "c"});
        new ArrayList().stream();
        Stream.of(1, 2, 3, 4);
    }

 

三、中间操作、中止操作

中间操作,就是堆流中的元素进行处理,返回的依然是一个流对象

无状态操作:每个元素处理独立不受其他元素影响

有状态操作:依赖于所有元素,比如sorted只有获取到所有元素的值才能知道如何排序

非短路操作:处理完所有元素结束

短路操作:处理到符合条件的元素结束

 

四、示例

    public static void main(String[] args) throws InterruptedException {
        Optional<Integer> first = Arrays.stream("lby study hellow world".split(" ")).map(String::length).findFirst();
        System.out.println("----------");
        //s.chars()得到的IntStream不是Stream子类,所以要装箱boxed后返回
        Arrays.stream("lby hellow world".split(" ")).flatMap(s -> s.chars().boxed()).forEach(i->System.out.println((char)i.intValue()));
        System.out.println("----------");
        Arrays.stream("lby study hellow world".split(" ")).collect(Collectors.groupingBy(String::length)).forEach((k,v)->System.out.println(k+"==="+v));
    }

flatMap与map不同:map接收的是能够获取元素属性值fucntion,而flatMap接收的是返回元素属性属性值转化成流的function

上面的示例中,map返回流中是每个字符串的长度,flatMap返回流中是每个字符串的字符流,相当于每个字符都被汇总到了流中。map适合直接处理元素A的属性B,而flatMap适合梳理元素A的B属性也能变成流的场景。

posted @ 2019-12-25 18:37  扶不起的刘阿斗  阅读(1668)  评论(0编辑  收藏  举报