Ich habe eine Arraylist von VOs. Diese Objekte haben viele Eigenschaften und entsprechende Get/Set-Methoden. Ich möchte diese Array-Liste basierend auf einer Eigenschaft sortieren, die ich in Runtime bekommen werde. Lassen Sie mich im Detail erklären. Meine VO ist wie dieseine Liste von Objekten basierend auf Laufzeiteigenschaft sortieren
public class Employee {
String name;
String id;
private String getName() {
return name;
}
private String getId() {
return id;
}
}
Ich werde einen String ‚sortType‘ in Laufzeit bekommen, die entweder sein kann ‚id‘ oder ‚name‘. Ich möchte die Liste basierend auf dem Wert der Zeichenfolge sortieren.
Ich habe versucht, Komparator und Reflexion zusammen zu verwenden, aber kein Glück. Möglicherweise habe ich es nicht richtig verwendet. Ich möchte keine if-Schleife verwenden und neue Vergleichsklassen erstellen. Irgendwelche anderen Gedanken?
Der Versuch Fang sollte innerhalb der neuen Klasse sein. Hier ist der Arbeitscode. Wenn Sie eine separate Klasse für Komparatoren verwenden möchten, finden Sie diese in @ Bohemys Kommentar unten.
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;
}
}
});
Bitte Verwenden Sie das entsprechende Sprachtag. – NPE
Ups .. Ich habe es jetzt hinzugefügt. – jijo
Wenn Sie Ihren Code schreiben, der die Reflexion verwendet, können wir Ihnen möglicherweise sagen, was schief gelaufen ist ... – akuhn