收集Java中forEach的结果

IDK*_*IDK 0 java java-stream

我想收集 a 内调用的方法返回的值forEach

@PostMapping(value="insert-ppl")
public String insertPeople(@RequestBody @Valid @NotNull List<Person> people){
    people.forEach(this::insertPerson);
}
Run Code Online (Sandbox Code Playgroud)

insertPerson方法返回一个字符串,表明数据库中的插入是否成功。我想获取每次调用返回的字符串insertPerson。但我不能使用,.collect因为它不是流。

我怎样才能做到这一点?

Mir*_*uta 5

应该forEach用于对每个元素执行消耗操作。它不应该用于收集任何结果。

为此,您需要采取不同的做法。我认为最好的选择是只使用标准for循环并将每个insertPerson调用的结果添加到一个列表中,然后在最后返回该列表。

理论上,你可以使用类似的东西people.stream().map(this::insertPerson).toList(),但在我看来这不是个好主意,因为map()应该只是将输入映射到输出而没有任何副作用,但是你insertPerson显然有副作用,这可能会让读者理解起来更加“有问题”到底发生了什么。

  • `toList` 返回一个保证不可修改的列表。 (3认同)