Stream操作三个步骤
- 创建Stream
一个数据源( 如: 集合、数组 ) , 获取一个流
- 中间操作
一个中间操作链,对数据源的数据进行处理
- 终止操作(终端操作)
一旦执行终止操作,就执行中间操作链,并产生结果.之后,就不会再被使用
创建Stream的四种方式
方式一:通过集合
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream = list.stream();
方式二:通过数组
Integer[] arr={1,2,3,4}; Stream<Integer> stream = Arrays.stream(arr);
方式三:通过Stream.of()
Stream<Integer> stream = Stream.of(1, 2, 3);
方式四:创建无限流
#1. 迭代 Stream.iterate(0, t->t+1).forEach(System.out::println); #2. 创建无限流 Stream.generate(Math::random).forEach(System.out::println);
Stream中间操作
筛选与切片
filter(Predicate p) ---接受Lambda表达式,从流中排除某些元素.
stream.filter(item->item>10).forEach(System.out::println);
limit(n) ---截断流,使其元素不超过给定数量
stream.limit(n).forEach(System.out::println);
skip(n) ---跳过元素,返回一个扔掉了前 n 个元素的流,
stream.skip(n).forEach(System.out::println);
distinct() --筛选,通过流所生成元素的hashCode() 和 equals() 去除重复数据
stream.distinct().forEach(System.out::println) ;
映射
map(Function f) ---接受一个函数作为参数,该函数会被应用到每个元素上
List<String> list = Arrays.asList("a");
list.stream().map(String::toUpperCase).forEach(System.out::println);
flatMap(Function f) ---接受一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接为一个流
应用在funection返回值为一个Stream的时候
排序
sorted() ---自然排序
List<Integer> list = Arrays.asList(1,3,5,1,3);
list.stream().sorted().forEach(System.out::println);
sorted(Comparator com) ---定制排序
List<Integer> list = Arrays.asList(1,6,1,3);
list.stream().sorted(
(v1,v2)-> -Integer.compare(v1, v2)
).forEach(System.out::println);
Stream终止操作
匹配与查找
allMatch((Predicate predicate) 检查是否匹配所有元素
List<Integer> list = Arrays.asList(1,6,1,3);
boolean b = list.stream().allMatch(v -> v > 0);
anyMatch(Predicate predicate) 检查是否匹配至少一个元素
noneMatch(Predicate predicate) 检查是否没有匹配所有元素
findFirst() 返回第一个元素
findAny 返回当前流中的任意元素
count() 返回流中元素总数
max(Comparator comparator) 返回流中最大值
min(Comparator comparator) 返回流中最小值
forEach(Comparator comparator) 内部迭代
归纳
reduce(T identity, BinaryOperator<T> accumulator); ---将流中元素反复结合起来,得到一个值
List<Integer> list = Arrays.asList(1,6,1,3);
Integer reduce = list.stream().reduce(10, Integer::sum);
System.out.println(reduce);
收集
collect(Collector c) ---将流转为其他形式.接受一个Collector接口的实现
list.stream().collect(Collectors.toList());