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() 第一个元素