Javaのストリームライフサイクルコールバック

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);
        }
    });
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222678&siteId=1