webentwicklung-frage-antwort-db.com.de

CollectionUtils in Java mit Prädikat

Ich habe einen List<Object> und ich möchte den ersten Wert zurückgeben, der als wahr gilt, der einem Prädikat entspricht. 

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

Auch nicht mit Java 8, so dass kein Stream möglich ist. 

11
Rory Lester

So geben Sie das erste Element in der Liste zurück, das dem angegebenen Prädikat entspricht:

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

So filtern Sie die Liste, sodass sie nur Elemente enthält, die dem Prädikat entsprechen:

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

Sie können feststellen, dass der Predicate<MyObject> derselbe ist.

25
Jean Logeart

In Java 8 können Sie schreiben

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

Vor Java 7 ist die einfachste Lösung die Verwendung einer Schleife.

Integer found = null;
for(integer i : list)
   if (i >= 1 && i <= 5) {
        found = i;
        break;
   }

Dies wäre der sauberste und schnellste Weg, da Java 7 keine Lambdas unterstützt.

5
Peter Lawrey

Sie können Collections.removeIf verwenden (ich gehe davon aus, dass Sie JDK 8 verwenden). Sie können auch einen Stream verwenden:

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

Mit Apach Commons Collections können Sie CollectionUtils.filter verwenden.

0
Dici