Sto iniziando a utilizzare l'API di java 8 stream. Mi piacerebbe convertire una lista di "sql result set" in oggetti di dominio, cioè la struttura composita.Java 8 Stream: creazione di oggetti multilivello/compositi
Oggetti dominio: un utente dispone di una raccolta di autorizzazioni, ogni autorizzazione ha una raccolta di anni di applicazioni. Ad esempio, John ha 2 permessi (MODERATORE e DEV). suo permesso moderatore è applicabile solo per il 2014 e il 2015 il suo permesso di dev applicabile solo per 2014.
class User {
// some primitives attributes
List<Permission> permission;
}
class Permission {
// some primitives attributes
List<Integer> years;
}
ora faccio una query e ha ottenuto un elenco di risultati piatte, qualcosa di simile a:
[1, "moderator", 2014]
[1, "moderator", 2015]
[1, "dev", 2014]
[2, "dev", 2010]
[2, "dev", 2011]
[2, "dev", 2012]
I numeri 1 e 2 sono ID utente.
Ho provato varie costruzioni ma alla fine è più complesso che fluente. E non ha funzionato :)
Ho letto in un libro di Java 8 che è "semplice" costruire oggetti dompain con i collezionisti.
Ho pianto un po 'quando ho letto che:' (
ho provato
sb.collect(
collectingAndThen(
groupingBy(
Mybean::getUserId,
collectingAndThen(
groupingBy(Monbean::getPermissionId, mapping(convertPermission, toList())),
finisherFonction)
),
convertUser)
);
e ottenuto un inferno di fallimento generici compilation
- qual è il modo migliore per costruire più composito di livello. oggetti di dominio che utilizzano java 8 streams?
- è collectionAndThen/finisher una buona idea?
- oppure utilizzare solo il raggruppamento, seguito da una funzione di mappatura?
- si fa a trasformare il classificatore ad un oggetto (una specie di prima funzione di mappatura livello?)
Perché alla fine voglio sbarazzarsi della mappa e ottenuto un risultato List<User>
(credo di poter aggiungere una chiama la mappa sulla voce Set per terminare la trasformazione).
Quali sono i tuoi "risultati piatti"? Matrici di oggetti? – mkobit