我在我的控制器中有以下代码段,从第一个列表中我获得了所有用户,然后我迭代向他们发送电子邮件。在函数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();
答案 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
(当然,删除变量声明)。