我有一個List<Object>
,我想返回它找到的與謂詞匹配的第一個值。Java中使用謂詞的CollectionUtils
我發現我可以使用CollectionUtils.find(collection,predicate)
(Apache commons)。假設Object
包含一個名爲:value
的整數變量,我如何在謂詞中指定該值可以是1,2,3,4,5
,並丟棄那些不匹配的值。是否有可能做'包含'。
還沒有使用java 8所以無法做到流。
我有一個List<Object>
,我想返回它找到的與謂詞匹配的第一個值。Java中使用謂詞的CollectionUtils
我發現我可以使用CollectionUtils.find(collection,predicate)
(Apache commons)。假設Object
包含一個名爲:value
的整數變量,我如何在謂詞中指定該值可以是1,2,3,4,5
,並丟棄那些不匹配的值。是否有可能做'包含'。
還沒有使用java 8所以無法做到流。
您可以使用Collections.removeIf(我假設您使用的是JDK 8)。你也可以使用一個流:
list = list.stream().filter(predicate).collect(Collectors.toList());
使用APACH共享集合,你可以使用CollectionUtils.filter。
不幸的是,我不是,這就是爲什麼我選擇使用CollectionUtils。 – 2014-09-01 13:10:02
在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不支持lambda表達式。
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;
}
});
你可以注意到
apache commons .. – 2014-09-01 13:11:58