Abrufen von Objekten aus der Liste der Objekte basierend auf der Variablen im Objekt

8

Ich habe eine Liste von Benutzer-Objekten, ich möchte nur Benutzer-Objekte aus der Liste basierend auf Variablen in Benutzer-Objekt abrufen.

%Vor%

Ich habe eine Modellklasse wie diese. Jetzt habe ich eine Liste von Benutzerobjekten.

%Vor%

Ich möchte die Objekte aus der Benutzerliste abrufen, wenn der Benutzer männlich ist.

%Vor%

Ich mag den obigen Ansatz nicht. Gibt es eine bessere Möglichkeit, Objekte aus der Liste der Objekte basierend auf der Variablen im Objekt zu erhalten ..?

Gibt es irgendwelche Funktionen Java Collections ..? Können wir das mit Java Comparator lösen??

    
arulraj.net 05.06.2011, 10:14
quelle

5 Antworten

7

Wenn Sie Guava verwenden, können Sie Collections2.filter :

verwenden %Vor%

Und mit Java 8 können Sie noch besser machen:

%Vor%     
Chris Jester-Young 05.06.2011, 10:21
quelle
3

Dies können Sie mit Lambda-Funktionen und Reflexionen tun. Da Java jedoch keine Closures unterstützt, werden Sie feststellen, dass dieser Ansatz fehleranfälliger ist, mehr Code erfordert und langsamer ist.

Wenn Sie einen schnellen Weg wollen, können Sie eine Map & lt; Sec, List & lt; User & gt; & gt; oder MultiMap.

Übrigens: Ich würde ein Enum für den Sex der Person benutzen. Du solltest dich auf ein paar Möglichkeiten beschränken können;) Das könntest du auch mit Country machen.

    
Peter Lawrey 05.06.2011 10:19
quelle
2

Ich habe einen Weg in java8 mit Streams Filter

gefunden %Vor%     
arulraj.net 18.02.2017 07:47
quelle
1

Für einfache Filter mag ich lambdaj onlineers Syntax: Ссылка

%Vor%

Bei komplexen Bedingungen ist es besser, separate Filterfunktionen zu erstellen.

    
dbf 05.06.2011 11:04
quelle
0

Verwenden Sie MultiValueMap von Appache allgemeine Sammlung oder einfach Map<String List<User>> , um Benutzer am Anfang zu teilen, wenn Sie nach Geschlecht suchen, ist alles was Sie brauchen.

Solange Sie bestimmte Benutzer aus einer unsortierten Sammlung abrufen möchten, müssen Sie die gesamte Sammlung durchsuchen. Also gibt es keinen besseren Weg, es zu finden. Sie können diese Logik jedoch unter der Oberfläche verstecken.

Apache gemeinsame Sammlungen (und Guava wie Chris Jester-Young erwähnt) bieten CollectionUtils.select() , alles was Sie tun müssen, ist die Predicate zu implementieren. (Überprüfen Sie die Antwort von Chris Jester-Young für eine bessere Erklärung)

Oder, anstatt die Sammlung zu verwenden, um Benutzer herumzugeben, machen Sie es zu einem Objekt wie Users oder UserPack . Dann können Sie einen Methodenaufruf getMaleUsers() implementieren, um alle männlichen Benutzer innerhalb des Objekts für Sie zurückzugeben. Dieser Trick ist sehr nützlich, wenn Sie bestimmte Objekte sehr oft manipulieren müssen.

    
Rangi Lin 05.06.2011 11:35
quelle

Tags und Links