我有一个List<Object>
并且我想返回它找到的第一个与谓词匹配的值。
我发现我可以使用CollectionUtils.find(collection,predicate)
(Apache commons)。假设Object
包含一个名为 : 的整数变量value
,我如何在谓词中指定该值可以是1,2,3,4,5
并丢弃那些不匹配的值。是否有可能做'包含'。
也没有使用 java 8 所以无法做流。
我有一个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 不支持 lambda,因此这将是最干净和最快的方式。
您可以使用Collections.removeIf(我假设您使用的是 JDK 8)。您还可以使用 Stream :
list = list.stream().filter(predicate).collect(Collectors.toList());
使用 Apache Commons Collections,您可以使用CollectionUtils.filter。