假设我有一个方法将只读视图返回到成员列表:
class Team {
private List < Player > players = new ArrayList < > ();
// ...
public List < Player > getPlayers() {
return Collections.unmodifiableList(players);
}
}
Run Code Online (Sandbox Code Playgroud)
进一步假设所有客户端都立即迭代一次列表.也许将玩家放入JList或其他东西.客户端就不能存储到列表的引用以便稍后进行检查!
鉴于这种常见情况,我应该返回一个流吗?
public Stream < Player > getPlayers() {
return players.stream();
}
Run Code Online (Sandbox Code Playgroud)
或者在Java中返回非惯用的流?设计的流是否始终在它们创建的同一表达式中"终止"?
如果有可能Stream从春天回来,我很好奇RestController
@RestController
public class X {
@RequestMapping(...)
public Stream<?> getAll() { ... }
}
Run Code Online (Sandbox Code Playgroud)
做这样的事情可以吗?我尝试过,Spring返回除了流的值以外的其他内容.
我要一直回来List<?>吗?
如果我正在编写.NET代码,我会经常暴露IEnumerable<T>它可能有意义的地方.也许这取决于LINQ以及你可以使用foreach的事实,但是做到这一点感觉"正确".
private List<String> _myList;
public IEnumerable<String> MyList
{
get { return _myList; }
}
Run Code Online (Sandbox Code Playgroud)
现在我正在编写Java 8代码,我正在讨论是否应该以Stream<T>同样的方式在可能的情况下公开?也许是因为我必须打电话Collection.stream(),感觉就像是"做工",但感觉不对?
private Collection<String> myCollection;
public Stream<String> getStuff() {
return myCollection.stream();
}
Run Code Online (Sandbox Code Playgroud)
是否Stream<T>应该以IEnumerable<T>可能的相同方式暴露在接口上?