Test90 ha scritto:
Bhe diciamo che la politica del team prevede l'utilizzo degli Stream per ogni cosa da fare
Allora: Stream "per ogni cosa" è un po' brutto/vago come approccio.
Per le liste, l'ordinamento da stream può avere senso
SE:
- la lista non sai da dove arriva e/o sai o presumi che è "immutabile"
- la lista originale per vari motivi non deve essere toccata e ne devi creare un'altra ordinata
Test90 ha scritto:
non riesco a replicare "order by nome desc, cognome desc"
Semplicemente:
Comparator.comparing(myDTO::getNome).thenComparing(myDTO::getCognome).reversed()
Questa espressione dà un Comparator che puoi usare ovunque si possa ordinare: lista.sort(comp) / Collections.sort(lista, comp) / unStream.sorted(comp)
NOTA: se hai provato a fare:
Comparator.comparing(myDTO::getNome).reversed().thenComparing(myDTO::getCognome).reversed()
è giusto tecnicamente ma NON ti dà quello che volevi (nome
desc, cognome
desc).
Questi metodi thenComparing() e reversed() funzionano per
incapsulamento ovvero ciascuno restituisce un
nuovo oggetto Comparator che "incapsula" il Comparator dello step precedente.
Quindi l'ultimo reversed() fa concettualmente il reverse del primo reversed() ed ottieni "nome ASC, cognome desc"
Mentre la soluzione detta all'inizio fa un singolo reversed() finale e questo "gira" il senso per entrambe le comparazioni precedenti.