了解Stream
Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一
个则是
Stream API(java.util.stream.*)
。
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对
集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。
使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数
据库查询。也可以使用 Stream API 来并行执行操作。简而言之,
Stream API 提供了一种高效且易于使用的处理数据的方式。
什么事Stream?
是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。
“集合讲的是数据,流讲的是计算!”
注意:
①Stream 自己不会存储元素。
②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
Stream 的操作三个步骤
⚫ 创建 Stream
一个数据源(如:集合、数组),获取一个流
⚫
中间操作
一个中间操作链,对数据源的数据进行处理
⚫
终止操作(终端操作)
一个终止操作,执行中间操作链,并产生结果
Steam的中间操作
多个中间操作可以连接起来形成一个流水线,除非流水 线上触发终止操作,否则中间操作不会执行任何的处理! 而在终止操作时一次性全部处理,称为“惰性求值”
筛选与切片
filter(Predicate p):
limit:
(短路:一旦找到指定数量的数据后,就不再查询)
skip:
(丢掉前两个)
distinct:(去重,需要在对象中重写hashCode和equals方法)
映射
map:将流中的每一个元素都用到函数中,然后再生成一个结果。
flatMap:将流中每一个元素中的每一个值转换成一个流。
排序
sorted()--自然排序(Comparable)安装Comparable排序的
sorted(Comparator com)---定制排序(Comparator)
终止操作:
终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如:List、Integer,甚至void
查找与匹配
归约
reduce和map的链接在工作中应用比较多,通常称为map-reduce模式
收集
collect将流转换为其他形式。接收一个Collector接口的实现,用于给Stream中元素做汇总的方法。
分组:
分区:
其他收集方式: