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??
Wenn Sie Guava verwenden, können Sie Collections2.filter
:
Und mit Java 8 können Sie noch besser machen:
%Vor%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.
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.
Tags und Links java list collections comparator