Questo esempio si basa sul polimorfismo e sul concetto di comparator.
Si esamini il codice e si cerchi di comprendere dettagliatamente l'ordine dell'output.
Main.java
package comparatorexample;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Docente x=new Docente("Mario");
Docente y=new Docente("Sandra");
Studente z=new Studente("Giovanna");
Studente w=new Studente("Antonio");
List<Persona> c=new LinkedList<Persona>();
c.add(x);
c.add(y);
c.add(z);
c.add(w);
Collections.sort(c);
Iterator<Persona> i=c.iterator();
while (i.hasNext()) {
Persona p=i.next();
System.out.println(p);
}
}
}
Output:
Sandra Docente
Mario Docente
Giovanna Studente
Antonio Studente
Persona.java
package comparatorexample;
class Persona implements Comparable{
String name=null;
public int compareTo(Object t) {
if (t instanceof Docente) return 1;
else if(t instanceof Studente) return -1;
return 0;
}
@Override
public String toString(){
return name+" "+this.getClass().getSimpleName();
}
}
Docente.java
package comparatorexample;
class Docente extends Persona implements Comparable{
public Docente(String s) {name=s;}
public int compareTo(Docente t) {
return this.name.compareTo(t.name);
}
}
Studente.java
package comparatorexample;
class Studente extends Persona implements Comparable{
public Studente(String s) {name=s;}
public int compareTo(Studente t) {
return this.name.compareTo(t.name);
}
}
Si esamini il codice e si cerchi di comprendere dettagliatamente l'ordine dell'output.
Main.java
package comparatorexample;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) {
Docente x=new Docente("Mario");
Docente y=new Docente("Sandra");
Studente z=new Studente("Giovanna");
Studente w=new Studente("Antonio");
List<Persona> c=new LinkedList<Persona>();
c.add(x);
c.add(y);
c.add(z);
c.add(w);
Collections.sort(c);
Iterator<Persona> i=c.iterator();
while (i.hasNext()) {
Persona p=i.next();
System.out.println(p);
}
}
}
Output:
Sandra Docente
Mario Docente
Giovanna Studente
Antonio Studente
Persona.java
package comparatorexample;
class Persona implements Comparable{
String name=null;
public int compareTo(Object t) {
if (t instanceof Docente) return 1;
else if(t instanceof Studente) return -1;
return 0;
}
@Override
public String toString(){
return name+" "+this.getClass().getSimpleName();
}
}
Docente.java
package comparatorexample;
class Docente extends Persona implements Comparable{
public Docente(String s) {name=s;}
public int compareTo(Docente t) {
return this.name.compareTo(t.name);
}
}
Studente.java
package comparatorexample;
class Studente extends Persona implements Comparable{
public Studente(String s) {name=s;}
public int compareTo(Studente t) {
return this.name.compareTo(t.name);
}
}