Java8列表.调用void函数

en *_*ris 2 java collections lambda java-8 java-stream

我在我的控制器中有以下代码片段,从第一个列表中我得到了所有用户,然后我迭代向他们发送电子邮件.不知何故,在函数中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();
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 10

map在您的方案中不是正确的操作.forEach是的,因为它是一个终端操作(所以你之后不需要任何调用)它只消耗Stream元素而不必返回任何东西:

users.stream().forEach (o -> sendEmail(o));
Run Code Online (Sandbox Code Playgroud)

或者你也可以直接调用forEachList,因为阿里斯建议:

users.forEach (o -> sendEmail(o));
Run Code Online (Sandbox Code Playgroud)

  • 实际上甚至.stream()也是不必要的.如果sendMail()方法驻留在有问题的服务中,他可以很好地执行`users.forEach(this :: sendEmail)`. (5认同)