使用谓词的java中的CollectionUtils

Ror*_*ter 11 java collections apache-commons apache-commons-collection

我有一个List<Object>,我想返回它找到的第一个与谓词匹配的值.

我发现我可以使用CollectionUtils.find(collection,predicate)(Apache commons).假设它Object包含一个名为:的整数变量value,我如何在谓词中指定该值可以1,2,3,4,5并丢弃那些不匹配的变量.有可能做'包含'.

也没有使用java 8所以无法做流.

Jea*_*art 26

要返回列表中与给定谓词匹配的第一个元素:

MyObject res = CollectionUtils.find(myList, new Predicate<MyObject>() {
    @Override
    public boolean evaluate(MyObject o) {
        return o.getValue() >= 1 && o.getValue() <= 5;
    }
});
Run Code Online (Sandbox Code Playgroud)

要过滤列表,使其仅包含与谓词匹配的元素:

CollectionUtils.filter(myList, new Predicate<MyObject>() {
    @Override
    public boolean evaluate(MyObject o) {
        return o.getValue() >= 1 && o.getValue() <= 5;
    }
});
Run Code Online (Sandbox Code Playgroud)

你可以注意到它Predicate<MyObject>是一样的.

  • 值得注意的是,通用的"Predicate"仅出现在版本4中 (4认同)

Pet*_*rey 5

在Java 8中,您可以编写

Optional<Integer> found = list.stream().filter(i -> i >= 1 && i <= 5).findAny();
Run Code Online (Sandbox Code Playgroud)

在Java 7之前,最简单的解决方案是使用循环.

Integer found = null;
for(integer i : list)
   if (i >= 1 && i <= 5) {
        found = i;
        break;
   }
Run Code Online (Sandbox Code Playgroud)

这将是最简洁,最快速的方式,因为Java 7不支持lambdas.