Aveces debemos de ordenar ArrayList por cualquiera de los elementos internos como por ejemplo, tenemos el siguiente ArrayList de tipo Persona
ArrayList<Persona> people = new ArrayList<>();
people.add(new Persona("Joe", 92422, df.parse("12-12-2010")));
people.add(new Persona("Joef", 24122, df.parse("1-12-2010")));
people.add(new Persona("Joee", 24922, df.parse("12-2-2010")));
y queremos ordenar el Array por orden del Id de mayor a menor, o de menor a mayor, o por fecha de mayor a menor o de menoy a mayor, la solucion es la siguiente:
import java.util.Date;
public class Persona {
public String name;
public int id;
public Date hireDate;
public Persona(String iname, int iid, Date ihireDate) {
name = iname;
id = iid;
hireDate = ihireDate;
}
public String toString() {
return name + " " + id + " " + hireDate.toString();
}
}
//-----------------------------------------------------------------------------------//
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Principal {
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("mm-dd-yyyy");
ArrayList<Persona> people = new ArrayList<>();
try {
people.add(new Persona("Joe", 92422, df.parse("12-12-2010")));
people.add(new Persona("Joef", 24122, df.parse("1-12-2010")));
people.add(new Persona("Joee", 24922, df.parse("12-2-2010")));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Collections.sort(people, new CompId());
System.out.println("BY ID");
for (Persona p : people) {
System.out.println(p.toString());
}
System.out.println("//-----------------------------------------//");
Collections.sort(people, new CompDate(false));
System.out.println("BY Date asc");
for (Persona p : people) {
System.out.println(p.toString());
}
Collections.sort(people, new CompDate(true));
System.out.println("BY Date desc");
for (Persona p : people) {
System.out.println(p.toString());
}
}
public static class CompId implements Comparator<Persona> {
@Override
public int compare(Persona arg0, Persona arg1) {
return arg0.id - arg1.id;
}
}
public static class CompDate implements Comparator<Persona> {
private int mod = 1;
public CompDate(boolean desc) {
if (desc) mod =-1;
}
@Override
public int compare(Persona arg0, Persona arg1) {
return mod*arg0.hireDate.compareTo(arg1.hireDate);
}
}
}
De esta manera tenemos nuestro ArrayList organizado por ID y fecha
No comments:
Post a Comment