JDK 1.8-Stream中常用的API
1. Stream
Stream是一组用来处理数组,集合的API
1.1特性
- 不是数据结构,没有内部存储
- 不支持索引访问
- 延时计算
- 支持并行
- 很容易生成数据或集合
- 支持过滤,查找,转换,汇总,聚合等操作
1.2缺点
- 若不用并行计算,很多时候计算速度没有比传统的 for 循环快。
- 不容易使用debug模式调试。
- 在 lambda 语句中直接强制类型转换不方便。
- 不可以在foreach中修改foreach外面的值。
1.3 运行机制
Stream分为源source,中间操作,终止操作。一个流只会有一个终止操作,Stream只有遇到终止操作,它的源才会开始执行遍历操作。一个流只能使用一次。
1.3 Stream的创建
1.通过数组
String[] str={“a”,”b”,”c”}
Stream str1=Stream.of(str);
2.通过集合
List list=Arrays.asList(“a”,”b”,”c”);
Stream stream=list.stream();
3.通过iterate
Stream iterate=Stream.iterate(1,X->x+1);
Iterate.forEach(x->System.out.println(x));
2. Stream常用的API
2.1中间操作
2.1.1 filter过滤
Filter会根据条件截取流中符合条件的数据。
List integerList=Arrays.asList(1,2,3,4,5,6);
List collect=integerList.stream().filter(i->i%2==0).collect(Collectors.toList());
2.1.2 distinct去重
返回一个元素各异的流(根据流所生成元素的hashCode和Equals方法实现)
List numbers=Arrays.asList(1,1,2,2,3,4);
List collect=numbers.stream().distinct().collect(Collectors.toList());
2.1.3 sorted 排序
对流中的数据进行排序,可以用自然序或Comparator接口定义排序的规则,Comparator可以用lanbada表达式来初始化
List integers=Arrays.asList(1,9,8,3,4);
//排序默认为顺序
List sorted=integers.stream().sorted().collect(Collectors.toList());
//逆序
List reverseSorted
=integers.stream().sorted(Comparato