【问题标题】:Java 8 forEach use casesJava 8 forEach 用例
【发布时间】:2015-07-22 03:25:08
【问题描述】:

假设您有一个包含一些字符串的集合,并且您想要返回每个字符串的前两个字符(或其他一些操作......)。

对于这种情况,在 Java 8 中,您可以在从集合中获得的 stream() 上使用 mapforEach 方法(可能还有其他方法,但现在这并不重要)。

我个人会使用map 主要是因为我将forEach 与改变集合相关联,我想避免这种情况。我还创建了一个关于性能的非常小的测试,但在使用 forEach 时看不到任何改进(我完全理解小测试不能给出可靠的结果,但仍然如此)。

那么应该选择forEach 的用例有哪些?

【问题讨论】:

  • IMO,当操作可以并行执行时,优势就体现出来了。
  • @akhil_mittal,mapforEach 都可以并行执行。
  • @aioobe 谢谢,没找到

标签: java foreach java-8


【解决方案1】:

map 是更好的选择,因为您还没有尝试 对字符串进行任何操作,只需将它们映射到不同的字符串。

forEach 被设计为“最终操作”。因此,它不会返回任何东西,并且完全是关于改变 some 状态——尽管不一定是原始集合的状态。例如,您可以使用它将元素写入文件,并使用其他构造(包括map)来获取这些元素。

【讨论】:

    【解决方案2】:

    forEach 终止流并被执行,因为被调用的Cosumer 的副作用。它不一定会改变流成员。

    map 使用提供的Function 将每个流元素映射到不同的值/对象。返回一个Stream <R>,可以执行更多步骤。

    【讨论】:

      【解决方案3】:

      forEach 终端操作可能在以下几种情况下很有用:当您想收集到一些没有合适收集器的旧类时,或者当您根本不想收集但发送给您时外部某处的数据(写入数据库,打印到OutputStream 等)。在很多情况下,最好的方法是同时使用map(作为中间操作)和forEach(作为终端操作)。

      【讨论】:

        猜你喜欢
        • 2022-06-18
        • 1970-01-01
        • 2018-03-25
        • 2013-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多