SD :
ストリームの最後の要素が処理されたストリームは、完全に「消費」されたときにコールバックを登録するためのエレガントな方法が存在していますか?
(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()
ストリーム上。
アンドレアス:
コールonClose
返されるストリームは呼び出し側で閉じなければならないこと、およびドキュメント。
/**
* The returned stream must be closed.
*/
public Stream<Row> query(String sql){
Connection c = dataSource.openConnection();
return MyDB.query(sql).stream().onClose(() -> {
try {
c.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
});
}