Bait ha scritto:
Optional<Impiegato> temp = l1.stream().sorted().findFirst();
Come mai mi esce il seguente errore?
Exception in thread "main" java.lang.ClassCastException: class compito22_06_2020.Impiegato cannot be cast to class java.lang.Comparable (compito22_06_2020.Impiegato is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap').
Per poter fare un sorted() sugli Stream (e in generale un sort su liste/array), gli oggetti devono essere "comparabili" tra di loro, ovvero bisogna definire un determinato criterio di comparazione. Che nel tuo codice non c'è.
In Java la comparazione e ordinamento degli oggetti è da sempre affrontato tramite l'utilizzo di due interfacce chiamate Comparable e Comparator, con scopi leggermente differenti. Se non hai le idee chiare su questi concetti, c'è il mio articolo:
Comparazione e ordinamento degli oggetti in Java
Il sorted degli Stream ha 2 varianti:
- sorted() : si basa implicitamente su Comparable che deve essere implementato nella classe degli oggetti da comparare
- sorted(Comparator<? super T> comparator) : si basa su un Comparator esplicito
Quindi in base a cosa rappresenta e come deve essere il tuo criterio di comparazione, dovrai scegliere uno dei due.