代码之家  ›  专栏  ›  技术社区  ›  Rory Lester

java中的CollectionUtils使用谓词

  •  11
  • Rory Lester  · 技术社区  · 10 年前

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

    我发现我可以使用 CollectionUtils.find(collection,predicate) (Apache commons)。假设 Object 包含一个整数变量,名为: value ,如何在谓词中指定值可以是 1,2,3,4,5 并且丢弃那些不匹配的。是否可以执行“包含”。

    也不使用java8所以无法做流。

    3 回复  |  直到 10 年前
        1
  •  32
  •   Jean Logeart    10 年前

    要返回列表中与给定谓词匹配的第一个元素,请执行以下操作:

    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> 是相同的。

        2
  •  5
  •   Peter Lawrey    10 年前

    在Java 8中,您可以编写

    Optional<Integer> found = list.stream().filter(i -> i >= 1 && i <= 5).findAny();
    

    在Java7之前,最简单的解决方案是使用循环。

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

    这将是最干净、最快的方法,因为Java7不支持lambdas。

        3
  •  0
  •   Dici gla3dr    10 年前

    您可以使用 Collections.removeIf (我假设您使用的是JDK8)。您也可以使用流:

    list = list.stream().filter(predicate).collect(Collectors.toList());
    

    使用Apach Commons集合,您可以使用 CollectionUtils.filter .