业务开发过程中,经常会需要将集合中的数据进行聚合操作。比如:取出订单集合中有效订单的数据、按照订单类型做分组等等。以前的处理方式会遍历这个集合然后通过业务判断做处理,虽然可用,但远不够高效且笨拙。
为什么需要Stream
Stream是Java8的一大亮点,是对集合对象(Collection)功能的增强,进行聚合操作、批量数据操作。同时借助于Lambda表达式,提高编程效率和可读性。此外,Stream提供了并发模式,可充分使用多核处理器的优势,底层使用fork/join 并行方式来拆分任务和加速处理过程。
什么是Stream流
Stream不保存数据,也不是一种数据结构,更不是集合元素,而是有关算法和计算的,就像Iterator,只是更高级。Stream会隐式的在内部进行遍历,做出对应的数据转换。Stream类比于迭代器(Iterator)去理解,是单向、不可往复、只能遍历一次。
但是,迭代器只能串行化操作,也就是说用迭代器去遍历时,每个item 读完后再读下一个 item。Stream的并行操作依赖于Java7引入的Fork/Join 框架(JSR166y)来拆分任务和加速处理。
list.stream():串行遍历;
list.parallelStream():并行处理;
Stream之groupingBy
groupingBy是都集合进行分组,分组之后的结果形如Map<key,List>。其中,key是进行分组的字段