代码之家  ›  专栏  ›  技术社区  ›  en Peris

Java8列表。调用void函数

  •  2
  • en Peris  · 技术社区  · 6 年前

    我的控制器中有以下代码,从第一个列表中,我获取所有用户,然后迭代向他们发送电子邮件。在函数中 sendEmail() 我必须归还一件物品,但我不需要归还任何东西。

    List<User> users = new ArrayList<User>();
    
    menuPriceSummaryService.findAll()
        .stream()
        .map (mps -> checkPreferences(mps))
        .iterator()
        .forEachRemaining(users::addAll);
    
    users
        .stream()
        .map (o -> sendEmail(o))
        .iterator();
    
    2 回复  |  直到 6 年前
        1
  •  11
  •   Eran    6 年前

    map 在您的场景中不是正确的操作。 forEach 是,因为它是一个终端操作(因此您不需要在它之后进行任何调用),并且它只消耗 Stream 无需返回任何内容的元素:

    users.stream().forEach (o -> sendEmail(o));
    

    或者你可以直接打电话 forEach公司 List ,正如Aris所建议的:

    users.forEach (o -> sendEmail(o));
    
        2
  •  1
  •   Andy Turner    6 年前

    不清楚您为什么在这里使用迭代器。

    List<User> users = menuPriceSummaryService.findAll()
                .stream()
                .flatMap (mps -> checkPreferences(mps).stream())
                .collect(Collectors.toList());
    

    那就用吧 List.forEach :

    users.forEach(o -> sendEmail(o));
    

    如果您不需要 users 之后,您可以替换 collect 以上带有 forEach (当然,还要删除变量声明)。