假设您有一个带有一些字符串的集合,您想返回每个字符串的前两个字符(或其他某些操纵...)。
在Java 8中,对于这种情况,您可以使用您从集合中获得的map
或forEach
方法(也许是其他的)。
我个人会使用map
,主要是因为我将forEach
与突变集合相关联,我想避免这种情况。我还对性能创建了一个非常小的测试,但是使用forEach
时看不到任何改进(我完全理解,小测试不能给出可靠的结果,但仍然)。
那么,应该选择forEach
的用例?
map
是这样的更好的选择,因为您还没有尝试 do 与字符串的任何东西,只需将它们映射到不同的字符串。
forEach
设计为"最终操作"。因此,它不会返回任何内容,而是关于突变某些状态 - 尽管不一定是原始集合的状态。例如,您可以使用它将元素写入文件,而使用其他构造(包括map
)来获取这些元素。
forEach
终止流并因称为 Cosumer
的副作用而被视为。它不一定会突变流成员。
map
使用提供的Function
将每个流元素映射到不同的值/对象。返回了Stream <R>
,可以采取更多步骤。
forEach
终端操作在几种情况下可能很有用:当您要收集一些较旧的班级时,您没有合适的收集器或不想收集时完全,但是将数据发送到外面的某个地方(写入数据库,打印到OutputStream
等)。在很多情况下,最好的方法是同时使用map
(作为中间操作)和forEach
(作为终端操作)。