Java8列表。调用void函数

时间:2018-04-19 06:13:14

标签: java lambda collections 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();

2 个答案:

答案 0 :(得分:10)

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

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

或者您可以直接致电forEach上的List,正如Aris建议的那样:

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

答案 1 :(得分:1)

目前尚不清楚为什么要在这里使用迭代器。

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

然后使用List.forEach

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

如果您之后不需要users列表,则可以将上面的collect替换为forEach(当然,删除变量声明)。