[英]CollectionUtils in java using predicate
我有一個List<Object>
,我想返回它找到的第一個與謂詞匹配的值。
我發現我可以使用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不支持lambdas。
您可以使用Collections.removeIf (我假設您使用的是JDK 8)。 您還可以使用Stream:
list = list.stream().filter(predicate).collect(Collectors.toList());
使用Apach Commons Collections,您可以使用CollectionUtils.filter 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.