Skip to content
whoOverWeight edited this page Sep 12, 2018 · 1 revision

为什么需要Stream? Stream 作为Java8的亮点 与java.io包中InputStream和OutputStream是完全不同的概念 Java8的Stream是对集合对象功能的增强 专注对集合进行各种便利 高效的聚合操作

流的操作分为两种: * Intermediate *
一个流后面可以跟随零个或者多个intermediate操作 目的是打开流 作出某种程度的数据映射/过滤 然后返回一个新的流 交给下个操作使用 这类操作都是惰性化 使用这类方法 并没有真正开始流的遍历 Terminal: 一个流只能有一个terminal操作 当这个操作执行后 流就被用光了 无法再继续操作 所以这必然是流的最后一个操作 terminal操作的执行 才会真正开始流的遍历并会生成一个结果

对于一个Stream中进行多次转换操作 每次都对Stream的每个元素进行转换 转换操作都是lazy的 多个转换操作只会在Terminal操作的时候融合起来 一次循环完成 Stream中包含操作函数的集合 每次转换操作就是把转换函数放入这个集合中 在Terminal操作中循环Stream对应的集合 然后对每个元素执行所有的函数

流的操作: 常见的操作可以归类如下: Intermediate Map(mapToInt flatMap) filter distinct sorted peek limit skip parallel sequential unordered Terminal forEach forEachOrdered toArray reduce collect min max count anyMatch allMatch noneMatch findFirst findAny iterator Short-circuiting anyMatch allMatch noneMatch findFirst findAny limit

比较典型的用法? map/flatMap Map:把input stream 的每个元素映射成output stream的另外一个元素 (1:1映射) eg. List output = wordList.stream().map(String::toUpperCase).collect(Collectors.toList()); FlatMap:有一些场景下 是一对多映射关系的 这时可以使用flatMap

Clone this wiki locally