【发布时间】:2014-12-19 03:15:50
【问题描述】:
Scala 的集合提供了一个名为collect 的方法,它将filter 和map 合并为一个方法。在过滤 Object 集合以生成该集合的仅包含特定类型的子集时,它特别有用。
Java 8 的 Stream 有这样的东西吗?
【问题讨论】:
-
我想你已经知道你可以通过链接
map、filter和collect调用来做正确的事情。那么您请求在一个方法调用中执行此操作的目的是什么?因为“感觉”就像更有效率? -
@Holger 它将前置条件与映射函数联系起来,这有助于明确一个 是 与另一个的前置条件,并且无法打破通过更改方法调用的顺序来编写代码。
-
其实恰恰相反。没有人可以从包含映射函数和首先应用的谓词的单个方法的签名中分辨出来。相比之下,有了
StreamAPI,大家就明白map(…).filter(…).collect(…)和.filter(…).map(…).collect(…)的区别了。甚至可以推断出其他组合的含义,如map(…).filter(…).map(…).collect(…)... -
@Holger 实际上,给定参数 T -> Boolean 和 T -> R,对于输入 Stream[T] 和输出 Stream[R],只有两个没有副作用的逻辑实现,并且在这两个其中 T -> 布尔值在前。
-
map和filter的组合也可以这样说;顺序可以从泛型类型签名中推导出来,但不同的是,对于方法链,即使不知道签名,您也可以直观地识别顺序。
标签: java java-8 java-stream