Cách tiếp cận thành ngữ ở đây sẽ như sau (sử dụng JDK 9 API):
try (Stream<Record5<UUID, UUID, String, Integer, String>> stream = valuesToQuery
.stream()
.map(this::getSelectQueryForValue)
.reduce(Select::union)
.stream() // JDK 9 method
.flatMap(Select::fetchStream)) {
...
}
Nó sử dụng Optional.stream()
phương thức này đã được thêm vào JDK 9. Trong JDK 8, bạn có thể thực hiện việc này thay thế:
valuesToQuery
.stream()
.map(this::getSelectQueryForValue)
.reduce(Select::union)
.ifPresent(s -> {
try (Stream<Record5<UUID, UUID, String, Integer, String>> stream =
s.fetchStream()) {
...
}
})
Tôi đã viết blog về điều này chi tiết hơn tại đây.