L'approche idiomatique ici serait la suivante (en utilisant l'API JDK 9) :
try (Stream<Record5<UUID, UUID, String, Integer, String>> stream = valuesToQuery
.stream()
.map(this::getSelectQueryForValue)
.reduce(Select::union)
.stream() // JDK 9 method
.flatMap(Select::fetchStream)) {
...
}
Il utilise l'utile Optional.stream()
méthode, qui a été ajoutée dans JDK 9. Dans JDK 8, vous pouvez faire ceci à la place :
valuesToQuery
.stream()
.map(this::getSelectQueryForValue)
.reduce(Select::union)
.ifPresent(s -> {
try (Stream<Record5<UUID, UUID, String, Integer, String>> stream =
s.fetchStream()) {
...
}
})
J'ai blogué à ce sujet plus en détail ici.