Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête d'union avec plusieurs sélections post java 8

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.