Stream简介
Stream与Collection集合的区别:Collection是一种静态的内存数据结构,而Stream是有关计算的。
- Stream不会存储元素
- Stream不会改变原对象,而会返回一个持有结果的新Stream
- Stream操作是延迟执行的,这意味他们会等到需要结果才执行
Stream的创建
方式一:通过集合创建Stream
List<String> s = Arrays.asList("a", "b", "c");
//stream() − 为集合创建串行流。
Stream<String> stream = s.stream();
//parallelStream() − 为集合创建并行流。
Stream<String> stream = s.parallelStream();
方式二:通过数组创建Stream
IntStream intStream = Arrays.stream(array);
方式三:通过Stream.of
Stream<Integer> integerStream = Stream.of(1,2,3);
筛选和切片
List<Integer> list = Stream.of(1,2,3,4,5,6,7,8,9,10,10).collect(Collectors.toList());
//1.过滤filter,过滤出>5的
list.stream().filter(item->item>5).forEach(System.out::println);
//2.截断limit,取前6个
list.stream().limit(6).forEach(System.out::println);
//3.跳过skip,跳过前2
list.stream().skip(2).forEach(System.out::println);
//4.过滤重复元素
list.stream().distinct().forEach(System.out::println);
映射
List<String> list =Stream.of("a","b","c").collect(Collectors.toList());
//1.映射map,将元素一一映射
list.stream().map(str->str.toUpperCase()).forEach(System.out::println);
排序
List<Integer> list = Stream.of(1,2,3,4,5,6,7,8,9,10,10).collect(Collectors.toList());
//排序,升序
list.stream().sorted().forEach(System.out::println);
统计
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());
终止操作
List<Integer> list = Stream.of(1,2,3,4,5,6,7,8,9,10,10).collect(Collectors.toList());
//判断是否所有数字都大于5
boolean b1 = list.stream().allMatch(i->i>5);
//判断是否存在有数字大于5
boolean b2 = list.stream().anyMatch(i->i>5);
//查找第一个数字
Optional<Integer> first = list.stream().findFirst();
//统计列表元素数量
long count = list.stream().count();
//查找当前流中的元素
Optional<Integer> any = list.stream().findAny();
//计算数的总和
Integer reduce = list.stream().reduce(0, Integer::sum);
//收集返回一个list
List<Integer> collect = list.stream().collect(Collectors.toList());
//收集返回一个set
Set<Integer> collect1 = list.stream().collect(Collectors.toSet());