Java8-Stream流处理
来源:互联网 发布:小猪软件下载 编辑:程序博客网 时间:2024/04/25 07:10
Java8中的Stream是对与集合对象有所加强的新特性,专注于集合对象进行各种非常便利,高效的聚合操作,同时提供串行与并行两种模式的汇聚操作,使用了fork/join并行方式来拆分任务、加速处理过程。注意,这里的stream与原先的文件I/O流没有必然关系,是在Java8中的新内容。
Stream有时类似于一个迭代器,但是相比原来的Iterator串行命令式的执行过程,stream通过并行方式去便利,遍历时stream数据会被分成多段,其中每一段都在不同的线程中进行处理,然后归并统一。
生成Stream的方式
- 从Collection集合获取
list.stream()
- 从BufferedReader获取
java.io.BufferedReader.lines()
- 静态工厂、自己构建
- …
流的几种操作类型
- Intermediate 中间件式
一个流的后面可以跟多个中间件式的操作,其目的主要是打开流,做出某种程度的数据映射、过滤,然后返回一个新流,交给下一步操作。
List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9);System.out.println( numbers.stream() //获取流 .filter(n -> n%2==0) //Intermediate操作 .findFirst()); //Terminal操作
Terminal 终点式
一个流只能有一个终点式操作,当这个操作执行后,就表示流被用光了,无法再次进行其他的操作。终点式操作的执行,才会真正开始流的遍历操作,并生成一个side effect。short-circuiting 短路式
这个操作类型与上两个并存,主要表示以下两种模式:
对于一个中间件式操作,若接受一个无限大的stream,则返回一个有限的;
对于一个终点式操作,若他接受一个无限大的stream,能在有限时间内计算出结果;
常用的构造流的方式
Stream stream = Stream.of("a","b","c");stream = Arrays.stream(strArray);stream = list.stream();
已提供的包装类型流
- IntStream
- LongStream
- DoubleStream
可帮助在使用过程中减少装箱/拆箱的消耗
流的操作
1. map/flatmap
把inputStream的每个元素,映射成outputStream的另一个元素
2. filter
对原Stream的元素进行测试,通过的保存下来继续向下流
3. forEach
接受第一个lambda表达式为流中的每个元素去执行
4. reduce
把Stream的元素组合起来,它有提供一个初始值,然后依照运算规则,与前面的Stream的第一个,第二个...第n个元素进行组合
5. limit/skip
limit返回流的前n个元素,skip为扔掉流的前n个元素
6. sorted
排序
7. min/max/distinct
返回流的最小值/最大值/平均值
8. Match
allMatch:判断流中全部元素是否符合传入的predicate,符合返回true
anyMatch:判断流中有无元素是否符合传入的predicate,符合返回true
noneMatch:判断流中全部元素是否符合传入的predicate,不符合返回true
在实现上,match相关方法不需要遍历全部元素,只要有一个元素不满足断言就退出,skip余下的元素
用Collectors来进行集合的reduction操作
主要作用就是降低集合与流之间的简化、转化等操作的复杂度,实用性大,例如:
list.collect(Collectors.toList());
collect作为一个Terminal方法一般放在最后。
- Java8-Stream流处理
- Java8 stream流介绍
- java8 stream流 collect
- Java8 Stream流操作
- java8 Stream流操作介绍
- java8新概念之stream流
- Java8新特性Stream流
- 【JAVA8】stream 流相关操作
- Java8 Stream
- java8 stream
- Java8 Stream
- Java8 Stream
- Java8:Stream
- java8-stream
- java8 stream
- Java8 Stream
- Java8 Stream
- Java8 stream
- set_bit、clear_bit、wait_on_bit_lock、wake_up_bit整理
- dfs hdu 1016 Prime Ring Problem
- loadrunner在监控Linux时的问题--问题记录
- 线程安全队列(一)
- 判断字符串是否没有重复字符
- Java8-Stream流处理
- Redis源码剖析--简单动态字符串sds
- VM VirtualBox 上安装 CentOs6.4(详细)
- Spark之DataFrame 练习
- 初识三层架构
- Web使用Cookie进行会话管理
- linux常用命令
- Activiti笔记
- Cordova+Angularjs+Ionic混合开发入门篇(三)—— Cordova插件的创建与安装