查找集合中具有给定属性的所有对象

2022-08-31 11:06:16

我有一些复杂的对象,例如猫,它具有许多属性,例如年龄,最喜欢的猫粮等。

一堆猫被存储在Java集合中,我需要找到所有3岁的猫,或者那些最喜欢的猫粮是Whiskas的猫。当然,我可以编写一个自定义方法来查找具有特定属性的Cats,但是对于许多属性来说,这很麻烦;有没有一些通用的方法可以做到这一点?


答案 1

试试共享资源集合 API:

List<Cat> bigList = ....; // master list

Collection<Cat> smallList = CollectionUtils.select(bigList, new Predicate() {
    public boolean evaluate(Object o) {
        Cat c = (Cat)o;
        return c.getFavoriteFood().equals("Wiskas") 
            && c.getWhateverElse().equals(Something);
    }
});

当然,您不必每次都使用匿名类,您可以为常用搜索创建接口的实现。Predicate


答案 2

使用Java 8 lambda表达式,您可以执行类似操作

cats.stream()
    .filter( c -> c.getAge() == 3 && c.getFavoriteFood() == WHISKAS )
    .collect(Collectors.toList());

概念上与番石榴谓词方法相同,但使用lambda看起来更干净

对于OP来说,可能不是一个有效的答案,但对于有类似需求的人来说,值得注意。:)