假设我有一个方法可以返回成员列表的只读视图:
class Team {
private List<Player> players = new ArrayList<>();
// ...
public List<Player> getPlayers() {
return Collections.unmodifiableList(players);
}
}
进一步假设客户端只是立即一次性地迭代列表。可能是为了将玩家放入JList或类似的组件中。客户端不会存储对列表的引用以供以后查看!
考虑到这种常见情况,我应该返回一个流吗?
public Stream<Player> getPlayers() {
return players.stream();
}
在Java中,返回流是否不符合惯用方式?流是被设计为总是在创建它们的同一表达式中“终止”的吗?
players.stream()
就是一个返回流给调用者的方法。真正的问题是,你是否想限制调用者只能遍历一次,并且阻止他通过Collection
API 访问你的集合?也许调用者只想将其addAll
到另一个集合中? - Marko Topolnik