Ho un arraylist di VO. Questi oggetti hanno molte proprietà e metodi get/set corrispondenti. Voglio ordinare questo elenco di array in base a una proprietà che otterrò in fase di esecuzione. Lasciatemi spiegare in dettaglio. Il mio VO è come questoordina una lista di oggetti basata sulla proprietà di runtime
public class Employee {
String name;
String id;
private String getName() {
return name;
}
private String getId() {
return id;
}
}
sarò sempre uno stringa ‘sortType’ in fase di esecuzione, che può essere sia ‘id’ o ‘nome’. Voglio ordinare l'elenco in base al valore della stringa.
Ho provato a utilizzare il comparatore e il riflesso insieme, ma senza fortuna. Forse non l'ho usato correttamente. Non voglio usare un ciclo if e creare nuove classi di confronto. Qualche altro pensiero?
Il fermo di prova dovrebbe trovarsi all'interno della nuova classe. Ecco il codice funzionante. Se si desidera utilizzare una classe separata per il comparatore, si prega di trovarlo nel commento di @ Bohemian qui sotto.
String sortType = "name"; // determined at runtime
Collections.sort(results, new Comparator<Employee>() {
public int compare(Employee c1, Employee c2) {
try{
Method m = c1.getClass().getMethod("get" + StringUtils.capitalize(sortType));
String s1 = (String)m.invoke(c1);
String s2 = (String)m.invoke(c2);
return s1.compareTo(s2);
}
catch (Exception e) {
return 0;
}
}
});
prega usa il tag della lingua appropriato. – NPE
Oops .. L'ho aggiunto ora. – jijo
Se pubblichi il tuo codice che utilizzava il riflesso, potremmo essere in grado di dirti cosa è andato storto ... – akuhn