web-dev-qa-db-ja.com

CollectionUtils in Java述語を使用して

_List<Object>_があり、述語に一致する最初の値がtrueであると返します。

CollectionUtils.find(collection,predicate)(Apache commons)を使用できることがわかりました。 Objectvalueと呼ばれる整数変数が含まれていると仮定すると、値が_1,2,3,4,5_になる可能性があることを述語でどのように指定し、一致しないものを破棄しますか? 「含む」ことは可能ですか?.

また、Java 8を使用していないため、ストリームを実行できません。

11
Rory Lester

指定された述語に一致するリストの最初の要素を返すには:

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

述語に一致する要素のみが含まれるようにリストをフィルタリングするには:

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

Predicate<MyObject> 同じです。

26
Jean Logeart

Java 8で書くことができます

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

Java 7の前に最も簡単な解決策は、ループを使用することです。

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

Java 7はラムダをサポートしていないため、これは最もクリーンで高速な方法です。

5
Peter Lawrey

Collections.removeIf を使用できます(JDK 8を使用していると仮定しています)。 Streamを使用することもできます:

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

Apach Commonsコレクションを使用すると、 CollectionUtils.filter を使用できます。

0
Dici