_List<Object>
_があり、述語に一致する最初の値がtrueであると返します。
CollectionUtils.find(collection,predicate)
(Apache commons)を使用できることがわかりました。 Object
にvalue
と呼ばれる整数変数が含まれていると仮定すると、値が_1,2,3,4,5
_になる可能性があることを述語でどのように指定し、一致しないものを破棄しますか? 「含む」ことは可能ですか?.
また、Java 8を使用していないため、ストリームを実行できません。
指定された述語に一致するリストの最初の要素を返すには:
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>
同じです。
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はラムダをサポートしていないため、これは最もクリーンで高速な方法です。
Collections.removeIf を使用できます(JDK 8を使用していると仮定しています)。 Streamを使用することもできます:
list = list.stream().filter(predicate).collect(Collectors.toList());
Apach Commonsコレクションを使用すると、 CollectionUtils.filter を使用できます。