1,什么是 Stream
stream /striːm/ :流,溪,小溪,数据流
- IO 流:字节流、字符流,用于数据传输,输入和输出
- 集合框架:Collection(List)、Map、Iterator(迭代器)
- Stream 流:配合 lambda 表达式,用于数据处理(过滤、排序、聚合、统计、分组等各种计算,可看作是增强版的 Iterator)
- Collection 是一种静态的内存数据结构,主要面向内存,存储在内存中
- Stream 是有关计算的,主要是面向CPU,通过CPU实现计算
2,Stream 常用方法
2.1 筛选(filter、distinct、skip、limit)
2.2 排序(sorted)
- sorted():自然排序,流中元素需实现Comparable接口
- sorted(Comparator c):Comparator排序器自定义排序
// List 排序
list.stream().sorted((x,y)->{
// 如果时间为空,放到末尾
if(StringUtil.isEmpty(x.get("time"))) return 1;
if(StringUtil.isEmpty(y.get("time"))) return -1;
return y.get("time").compareTo(x.get("time"));
}).collect(collectors.tolist());
// List<DTO> 排序
mQaColNameRepeatDtos = mQaColNameRepeatDtos.stream().sorted(Comparator.comparing(e->e.getColNameEns().size())).collect(Collectors.toList());
Collections.reverse(mQaColNameRepeatDtos);
// JSONArray 排序
jsonArray.stream().sorted((x,y)->{
String timeX = ((JSONObject) x).getString("time");
String timeY = ((JSONObject) y).getString("time");
if(StringUtil.isEmpty(timeX)) return 1;
if(StringUtil.isEmpty(timeY)) return -1;
return timeY.compareTo(timeX);
}).collect(Collectors.toCollection(JSONArray::new));
// JSONArray转list
List<JSONObject> list = JSONArray.parseArray(dataArray.toJSONString(), JSONObject.class);
// 逆序
Collections.reverse(list);
// list转JSONArray
JSONArray dataArray = JSONArray.parseArray(list.toString());
2.3 映射(map)
map
:接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素
2.4 聚合(max/min/count)
2.5 归约(reduce)
2.5 收集(collect)
2.5.1 统计(count/averaging)
2.5.2 分组(partitioningBy/groupingBy)
2.5.3 归约(reducing)
结构参考:
3,终止操作分类
3.1 查找与匹配
3.2 归约
3.3 收集
3.4 参考
java8新特性之Stream 终止操作的多种方式_战丶后风!!的博客-优快云博客_java stream 中断1、概述终止操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如:List、Integer 。2、终止操作分类①查找与匹配方法简述allMatch(Predicate p)检查是否匹配所有元素anyMatch(Predicate )检查是否至少匹配一个元素noneMatch(Predicate p)检查是否没有匹配所有元素find...
https://blog.youkuaiyun.com/weixin_44187730/article/details/937375174,idea 中 Stream 调试
5,参考链接
Java8初体验(二)Stream语法详解 | 并发编程网 – ifeve.comhttp://ifeve.com/stream/