【发布时间】:2014-08-31 20:21:21
【问题描述】:
假设我有一个方法可以将只读视图返回到成员列表中:
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()就是这样一种方法,它向调用者返回一个流。真正的问题是,您真的想将调用者限制为单次遍历,并拒绝他通过CollectionAPI 访问您的集合吗?也许调用者只是想addAll将它发送到另一个集合? -
这一切都取决于。你总是可以做 collection.stream() 和 Stream.collect()。所以这取决于您和使用该功能的调用者。
标签: java collections java-8 encapsulation java-stream