Java流生命周期回调
当流的最后一个元素被处理并且流被完全“消耗”时,是否存在一种优雅的方法来注册回调
尤其是当流源(如DB游标、一个Iterator<T>
或一个自定义Supplier<T>
)是有限的,并且可以明确地知道何时没有更多数据时
例如:
public Stream<Row> query(String sql){
Connection c = dataSource.openConnection();
Stream<Row> rows = MyDB.query(sql).stream();
c.close();
return rows;
}
现在,立即关闭连接是徒劳的,相反,在流被完全消耗时安排关闭连接会更好
我知道有onClose()
API,但这依赖于用户在流上显式调用close()
# 1 楼答案
调用^{} ,并记录调用者必须关闭返回的流