什么是 Stream
现在很多大数据量系统中都存在分表分库的情况。例如,电商系统中的订单表,常常使用用户 ID 的 Hash 值来实现分表分库,这样是为了减 少单个表的数据量,优化用户查询订单的速度。
但在后台管理员审核订单时,他们需要将各个数据源的数据查询到应用层之后进行合并操 作。
例如,当我们需要查询出过滤条件下的所有订单,并按照订单的某个条件进行排序,单个数 据源查询出来的数据是可以按照某个条件进行排序的,但多个数据源查询出来已经排序好的 数据,并不代表合并后是正确的排序,所以我们需要在应用层对合并数据集合重新进行排序。
在 Java8 之前,我们通常是通过 for 循环或者 Iterator 迭代来重新排序合并数据,又或者 通过重新定义 Collections.sorts 的 Comparator 方法来实现,这两种方式对于大数据量系 统来说,效率并不是很理想。
Java8 中添加了一个新的接口类 Stream,他和我们之前接触的字节流概念不太一样, Java8 集合中的 Stream 相当于高级版的 Iterator,他可以通过 Lambda 表达式对集合进 行各种非常便利、高效的聚合操作(Aggregate Operation),或者大批量数据操作 (Bulk Data Operation)。