9

Ich habe eine List<Object> und ich möchte den ersten Wert, der wahr findet, die ein Prädikat entspricht.CollectionUtils in Java mit Prädikat

Ich habe festgestellt, dass ich CollectionUtils.find(collection,predicate) (Apache Commons) verwenden kann. Angenommen, die Object enthält eine ganzzahlige Variable mit dem Namen: value, wie gebe ich im Prädikat an, dass der Wert 1,2,3,4,5 sein kann, und verwerfen diejenigen, die nicht übereinstimmen. Ist es möglich, 'enthält' zu tun?

Auch nicht mit Java 8 so nicht in der Lage zu streamen.

+0

Apache commons .. –

Antwort

22

Um das erste Element in der Liste zurück, die das angegebene Prädikat übereinstimmt:

MyObject res = CollectionUtils.find(myList, new Predicate<MyObject>() { 
    @Override 
    public boolean evaluate(MyObject o) { 
     return o.getValue() >= 1 && o.getValue() <= 5; 
    } 
}); 

Um die Liste zu filtern, so dass es nur Elemente enthält das Prädikat übereinstimmt, gefunden

CollectionUtils.filter(myList, new Predicate<MyObject>() { 
    @Override 
    public boolean evaluate(MyObject o) { 
     return o.getValue() >= 1 && o.getValue() <= 5; 
    } 
}); 

Sie feststellen können, dass Das Predicate<MyObject> ist das gleiche.

+0

Ich dachte, das OP wollte die Liste filtern (verwerfen diejenigen, die nicht übereinstimmen). Sie finden nur das erste Objekt, das dem Prädikat entspricht. – Dici

+4

Beachten Sie, dass das generische 'Prädikat' nur in der Version 4 – blgt

+0

@Dici vorhanden ist, Sie können Recht haben. Ich bin nicht 100% sicher, was das OP machen möchte ... –

0

Sie können Collections.removeIf verwenden (ich nehme an, dass Sie JDK 8 verwenden). Sie können auch einen Strom verwenden:

list = list.stream().filter(predicate).collect(Collectors.toList()); 

Mit Apach Commons Sammlungen, können Sie CollectionUtils.filter verwenden.

+0

Leider bin ich nicht, weshalb ich CollectionUtils gewählt habe. –

5

In Java 8 können Sie schreiben

Optional<Integer> found = list.stream().filter(i -> i >= 1 && i <= 5).findAny(); 

Bevor Java 7 ist die einfachste Lösung, um eine Schleife zu verwenden ist.

Dies wäre der sauberste und schnellste Weg, da Java 7 keine Unterstützung für Lambdas bietet.