Filtern einer ArrayList mit einem Objekt-Feld

8

Ich habe eine ArrayList, die mit Objekten gefüllt ist.

Meine Objektklasse namens Article mit zwei Feldern;

%Vor%

Ich möchte meine Liste mit dem desArt -Feld filtern, und für den Test habe ich den String "test" verwendet.

Ich habe die Guava von google benutzt, mit der ich eine ArrayList filtern kann.

das ist der Code, den ich ausprobiert habe:

%Vor%

aber dieser Code funktioniert nicht.

    
Aimad Majdou 31.05.2013, 11:46
quelle

6 Antworten

16

Das ist normal: Predicates.containsPattern () funktioniert auf CharSequence s, was Ihr gestionStock.Article -Objekt nicht implementiert.

Sie müssen Ihr eigenes Prädikat schreiben:

%Vor%

Verwenden Sie dann:

%Vor%

Dies ist jedoch ziemlich viel Code für etwas, was mit weniger funktionaler Programmierung in viel weniger Code gemacht werden kann, wie von @mgnyp ... demonstriert.

    
fge 31.05.2013, 11:56
quelle
13

In Java 8 mit Filter

%Vor%     
Shreshtt Bhatt 06.08.2016 12:00
quelle
11

Sie können eine for-Schleife verwenden oder für jede Schleife die Liste durchlaufen. Möchten Sie basierend auf einer Bedingung eine andere Liste erstellen? Das sollte funktionieren, denke ich.

%Vor%     
monika 31.05.2013 11:52
quelle
2

Guava ist eine Bibliothek, die Ihnen erlaubt, einige funktionale Programmierung in Java zu verwenden. Eines der gewinnbringenden Dinge in der funktionalen Programmierung ist die Transformation der Sammlung wie

Sammlung - & gt; op - & gt; op - & gt; op - & gt; transformierte Sammlung.

Schau hier:

%Vor%

Es ist schön, nicht wahr?

Das zweite gewinnende Ding ist Lambda-Funktionen. Schau hier:

%Vor%

Tatsächlich hat Java noch keine reinen Lambda-Funktionen. Wir werden es in Java 8 tun können. Aber jetzt können wir dies in IDE Inellij Idea schreiben, und IDE wandelt solches Lambda in Prädikat um, das im Handumdrehen erzeugt wird:

%Vor%

Wenn Ihre Filterbedingung regexp erfordert, wird der Code komplizierter und Sie müssen die Bedingung in eine separate Methode verschieben oder das gesamte Prädikat in eine separate Klasse verschieben.

Wenn all diese funktionale Programmierung zu kompliziert erscheint, erstellen Sie einfach eine neue Sammlung und füllen Sie sie manuell (ohne Guava):

%Vor%     
n00bot 31.05.2013 13:14
quelle
2

Bei Guava würde ich sagen, dass der einfachste Weg bei weitem Collections2.filter ist, wie zum Beispiel:

%Vor%     
facundofarias 22.08.2014 10:20
quelle
1

Versuchen Sie Folgendes:

%Vor%

Da Sie ein benutzerdefiniertes Objekt verwenden, sollten Sie Ihr eigenes Prädikat implementieren. Wenn Sie es irgendwo anders verwenden, definieren Sie es in einer Datei, ansonsten funktioniert diese Implementierung gut.

    
cxdf 31.05.2013 12:01
quelle

Tags und Links