在迭代流期间使用丰富(外部)API 调用是否可以?
例如下面的代码片段:
User[] fullUsers = plainUsers.stream().map(user -> {
user.setComments(restAPI.getUserComments(user.getId()));
return user;
}).toArray();
这里我们看到对一些外部restAPI系统的调用来填充用户实体中的字段。
这种方法好吗?或者在处理丰富/外部系统时我们应该采用不同的方法?
最佳答案
流是一种函数式习惯用法,函数式代码应该努力做到不可变且没有副作用。修改流项目不是一个好的做法。这在技术上是可行的,但我肯定会在代码审查中标记它。
map()
的目的是将对象转换为新对象。它不是对现有对象进行适当的修改。这是一种代码味道,您正在返回传入的对象。
我建议使用forEach()
。它被设计成有副作用。
plainUsers.forEach(user -> user.setComments(restAPI.getUserComments(user.getId()));
User[] fullUsers = plainUsers.toArray(new User[0]);
或者,显式的 for
循环也可以工作:
for (User user: plainUsers) {
user.setComments(restAPI.getUserComments(user.getId()));
}
User[] fullUsers = plainUsers.toArray(new User[0]);
关于java - 如何在流迭代期间使用丰富(外部)调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59667269/