Stream 流
流可以让人以一种声明的方式处理数据,流在管道中传输,并且可以在管道的节点上进行处理,筛选、排序、聚合等。
元素在管道中经过中间操作处理,最后由最红操作得到前面处理的结果。
流是一个来自数据源的元素列表并指出聚合操作。
1.生成流
- stream():为集合创建串行流
- parallelStream():为集合创建并行流
2、foreach
stream可以用foreach来迭代流中的数据
List<Integer> list = Arrays.asList(1, 2, 3);
list.forEach(System.out::println);
3、map
map 用于映射每个元素到对应的结果
List<Integer> num = Arrays.asList(1, 2, 4, 5);
List<Integer> numm = num.Stream().map(m -> m*m).collect(Colloctors.toList());
4、filter
filter 用于通过设置条件过滤出元素
List<String> strList= Arrays.asList("a", "", "c", "v");
List<String> list = strList.Stream().filter(s -> !s.isEmpty()).collect(Colloctors.toList());
5、limit & skip
limit 用于获取指定数量的流
skip 跳过元素返回一个抛弃了前几个元素的流,若流中蒜素不满足n个,则返回空流 与limit互补
List<String> strList= Arrays.asList("a", "", "c", "v");
List<String> list = strList.Stream().filter(s -> !s.isEmpty()).limit(2).collect(Colloctors.toList());
6、sorted
sorted 用于对流进行排序
7、collectors
collectors 实现了归约操作,eg:将流转换成集合
collectors 可用于返回列表或字符串
- Collectors.toList() ----- 转换为集合列表
- Collectors.joining(",") ------转换为以逗号分隔的字符串
更多关于Collectors基本用法
List<String> strList= Arrays.asList("a", "", "c", "v");
List<String> list = strList.Stream().filter(s -> !s.isEmpty()).limit(2).collect(Colloctors.toList());
8、统计
有一些产生统计结果的收集器,主要用于 int、double、long 等基本类型
List<Integer> nums = Arrays.asList(1, 2, 3, 4);
IntSummaryStatistics statistics = nums.stream().mapToInt(x -> x * 2).summaryStatistics();
System.out.println(statistics);
9、distinct
distinct 筛选通过流所生成元素的hashCode() 和equals()去除重复元素
ps:自定义实体的蛆虫需要重写两个方法
10、reduce
reduce 归约,可以将流中元素反复结合起来得到一个值,返回T,eg:求和
List<Integer> list = Arrays.asList(2, 4, 6, 9);
Integer reduce = list.stream().reduce(0, (x, y) -> x + y);
11、count
count 可以返回流中元素的总数