Holen Sie Objekte aus der Liste der Objekte basierend auf den Variablen im Objekt
Ich habe die Liste der User-Objekt, ich will einfach nur, um Benutzer-Objekte aus der Liste basieren auf Variablen, die im User-Objekt.
public class User {
private int id;
private String sex;
private int age;
private String country;
/**
* Getter and setter for all variables
*/
}
Habe ich eine model-Klasse wie dieses. Jetzt habe ich die Liste von Benutzer-Objekten.
List<User> users = new ArrayList<User>();
Möchte ich, um die Objekte aus der Liste Benutzer, wenn der Benutzer ist Männlich.
List<User> ageList = new ArrayList<User>();
for(User object : users) {
if(object.getSex().equals("Male")){
ageList.add(object);
}
}
Ich weiß nicht, wie die oben erwähnten Ansatz. Gibt es einen besseren Weg, um Objekte aus der Liste der Objekte basierend auf den Variablen im Objekt..?
Gibt es irgendwelche Funktionen, die Java Collections ..? können wir lösen diese mit Hilfe von Java-Komparator..?
InformationsquelleAutor arulraj.net | 2011-06-05
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Guave, die Sie verwenden können
Collections2.filter
:Und mit Java 8 können Sie noch besser machen:
males = users.select {|user| user.sex == 'Male'}
select * from Users where sex = "Male"
ich Neige dazu, Ausdrücke, die beiden sind kurz und brauchen weniger Symbole. Die meisten Programmierer verstehen und schreiben einfacher SQL.Können Sie dies mit lambda-Funktionen und Reflexionen. Da aber Java nicht unterstützen Verschlüsse werden Sie feststellen, dass dieser Ansatz ist fehleranfällig, erfordert mehr code und ist langsamer.
Wenn Sie wollen eine schnelle Möglichkeit, dies zu tun Sie könnte wichtigste, dass eine Karte<Sec, List<Benutzer>> oder MultiMap.
BTW: würde ich ein Enum für das Geschlecht der person. Sie sollten in der Lage sein, sich selbst zu begrenzen, um ein paar Möglichkeiten 😉 Man könnte es ebenso tun, mit Land.
Ich einen Weg gefunden, in mit java8-streams filter
Für einfache Filter, die ich mag lambdaj onliners syntax:
http://code.google.com/p/lambdaj/wiki/LambdajFeatures
Für komplexe Bedingungen ist es besser, erstellen Sie separate filter-finction.
Verwenden MultiValueMap von Apache common Sammlung oder einfach
Map<String List<User>>
split Benutzer am Anfang, wenn die Benutzer nach sex ist alles, was Sie brauchen.So lange, wie Sie möchten, um bestimmte Benutzer aus einer unsortierten Sammlung, Suche durch die ganze Sammlung ist ein muss. Es gibt also keinen besseren Weg, um es abzurufen. Allerdings können Sie verstecken diese Logik unterhalb der Oberfläche.
Apache common collections (und Guave, wie Chris Jester-Jungen genannt) bieten
CollectionUtils.select()
alle Sie tun müssen, ist die Umsetzung derPredicate
. (überprüfen Sie die Antwort von Chris Jester-Young für bessere Erklärung)Oder anstelle von Sammlung zu übergeben Benutzer um, damit es in ein Objekt wie
Users
oderUserPack
. Anschließend können Sie implementieren eine Methode aufrufengetMaleUsers()
um alle männlichen Benutzer in das Objekt für Sie. Dieser trick ist ganz nützlich, wenn Sie brauchen, um zu manipulieren, bestimmte Objekte einer Menge.