Stream
概念:可以支持顺序和并行对元素操作的元素的集合.
作用: 提供了一种操作大数据接口,让数据操作更容易更快
使用stream,我们能够对collection 的元素进行过滤,映射 ,排序,去重等许多操作.
中间方法: 返回值为Stream
终点方法:返回值不是Stream
如何使用Stream?
- 通过Stream接口的静态工厂方法
- 通过collection接口的默认方法(常用)
常见的中间方法
1.Filter(过滤)
List persons =new ArrayList<>(); //人的集合
//过滤18以上的人
Stream personsOver18 = persons.stream().filter(p -> p.getAge() > 18);
2.Map(对元素进行操作)
//把person转成Adult
Stream map = persons.stream().filter(p -> p.getAge() > 18).map(person -> new Adult(person));
3.limit(截断)
对一个Stream进行截断操作,获取其前N个元素,如果原Stream中包含的元素个数小于N,那就获取其所有的元素
4.distinct(去重)
对于Stream中包含的元素进行去重操作(去重逻辑依赖元素的equals方法),新生成的Stream中没有重复的元素
终点方法
1.count (统计)
count是一个流的终点方法,可以使流的结果最终统计,返回int
int countOfAdult=persons.stream()
.filter(p -> p.getAge() > 18)
.map(person -> new Adult(person))
.count();
2.collect(收集流的结果)
collect方法也是一个流的终点方法,可收集最终的结果
List adultList= persons.stream()
.filter(p -> p.getAge() > 18)
.map(person -> new Adult(person));
.collect(Collectors.toList());
顺序流和并行流
//顺序流:
List <Person> people = list.getStream.collect(Collectors.toList());
//并行流:
List <Person> people = list.getStream.parallel().collect(Collectors.toList());
//可以看出,要使用并行流,只需要.parallel()即可
当使用顺序方式去遍历时,每个item读完后再读下一个item。
而使用并行去遍历时,数组会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。