代码之家  ›  专栏  ›  技术社区  ›  Héctor

如何在函数表达式中使用“reduce”转换此循环?

  •  1
  • Héctor  · 技术社区  · 8 年前

    我有这个Java 8代码:

    Contact contact = new Contact("");
    for (ContactEvent event : events) {
        contact = contact.apply(event);
    }
    

    我想用 Stream.reduce 方法。我尝试过:

    Contact contact = events.stream()
        .reduce(new Contact(""), 
        (contact1, contactEvent) -> contact1.apply(contactEvent), //Ok!
        (contact12, contact2) -> null); //I don't want this!
    

    我为什么要把两个结合起来 Contact S?我该怎么做呢?

    如果我回来 null 和上面一样,它工作得很好。调试器甚至不执行该行( return null )。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Ousmane D.    8 年前

    事实上,在这种特定的情况下,您无法避免组合器函数。

    然而,值得一提的是,合并器功能 (contact12, contact2) -> null 不会被呼叫。为了使合并器工作,流必须是并行的。否则,只调用Accumulator函数。

    推荐文章