gpt4 book ai didi

Java Stream 生命周期回调

转载 作者:行者123 更新时间:2023-12-04 21:29:46 30 4
gpt4 key购买 nike

当流的最后一个元素已被处理并且流被完全“消耗”时,是否存在一种优雅的方法来注册回调?

特别是当流源(如数据库游标、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);
}
});
}

关于Java Stream 生命周期回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56576890/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com