java8--Stream
大纲:
- 简介
- 创建流
- 中间操作、中止操作
- 示例
一、简介
Stream操作就是把集合或者数组放进流中,进行一系列链式处理,最终获取结果的一套api。
正常操作流程:
- 创建流
- 中间操作
- 中止操作
二、创建流
创建流的操作,返回一个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属性也能变成流的场景。