我有一个 List<Object>
,我想返回第一个符合谓词的值。我发现我可以使用 CollectionUtils.find(collection,predicate)
(Apache commons)。假设 Object
包含一个名为 value
的整数变量,如何在谓词中指定该值可以是 1,2,3,4,5
,并且舍弃不匹配的值。是否可以进行“包含”操作。
另外,由于没有使用 java 8,因此无法使用 stream。
我有一个 List<Object>
,我想返回第一个符合谓词的值。我发现我可以使用 CollectionUtils.find(collection,predicate)
(Apache commons)。假设 Object
包含一个名为 value
的整数变量,如何在谓词中指定该值可以是 1,2,3,4,5
,并且舍弃不匹配的值。是否可以进行“包含”操作。
另外,由于没有使用 java 8,因此无法使用 stream。
返回与给定条件匹配的列表中的第一个元素:
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>
是相同的。Optional<Integer> found = list.stream().filter(i -> i >= 1 && i <= 5).findAny();
Integer found = null;
for(integer i : list)
if (i >= 1 && i <= 5) {
found = i;
break;
}
list = list.stream().filter(predicate).collect(Collectors.toList());
使用 Apache Commons Collections,您可以使用 CollectionUtils.filter。