Существует ли элегантный способ регистрации обратных вызовов, когда последний элемент потока был обработан, и поток полностью «потребляется»?
Особенно, когда источник потока (например, курсор БД, 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()
в потоке.