Stream
1.数据源(集合,数组)
2.转换为流
3.通过一系列的操作(中间操作)
4.产生一个新流
如何转换为流
1. 通过Collections提供的Stream()和parallelStream()
List<String> list=new ArrayList<>();
Stream<String> stream1=list.stream();
2.Arrays中的静态方法获取数组流
Userandclass [] userandclasses=new Userandclass[10];
Stream stream2=Arrays.stream(userandclasses);
3.Stream类中的静态方法of()
Stream stream3=Stream.of(“aa”,“bb”);
4.创建无限流
Stream.iterate(0, (x) -> x + 2);
中间操作例子:
List<Userandclass> userandclassList = Arrays.asList(
new Userandclass((long) 1, (long) 1, (long) 1),
new Userandclass((long) 2, (long) 2, (long) 2),
new Userandclass((long) 3, (long) 3, (long) 3),
new Userandclass((long) 4, (long) 4, (long) 4)
);
Stream<Userandclass> stream = userandclassList.stream()
.filter((e) ->
e.getId() > 2
);
stream.forEach(System.out::println);
中间操作
1.筛选和切片
1.filter 筛选
2.limit(n) 截断 (取n个)
3.skip(n) 跳过(跳n个)
4.distinct 筛选(通过hashCode()和equals()去除重复元素)
//默认的equals()实际是判断两个引用是否指向内在中的同一个对象,相当于 ==
//当我们在使用形如HashMap, HashSet这样前面以Hash开头的集合类时,hashCode()就会被隐式调用以来创建哈希映射关系
2.映射
接收一个方法。
***例子:***map
List<Long> configConditionIds = taskConfigProcessDtos.stream().map(item -> item.getConditionId()).collect(Collectors.toList());
List<ConfigCondition> conditionbyIds = taskConfigProcessService.getConditionbyIds(configConditionIds);
***例子:***flatmap(将流中的每个值都转换成另一个流,然后把所有的流链接成一个流)
实际上把所有的流,整合成一个流。flat(平铺)
类似于add(Map),和addAll(flatMap)方法
终止操作
Stream.forEach(System.out::println)
注意:除非中间操作上触发终止操作,否则中间操作不会处理,而在结束的时候全部一次性处理,这叫做“惰性求值”。
- forEach() 遍历每个元素
- toArray() 转换为数组
- min(Comparator) 取最小的元素
- max(Comparator) 取最大的元素
- count() 总数
- findFirst() 第一个元素