查找集合中具有给定属性的所有对象
2022-08-31 11:06:16
我有一些复杂的对象,例如猫,它具有许多属性,例如年龄,最喜欢的猫粮等。
一堆猫被存储在Java集合中,我需要找到所有3岁的猫,或者那些最喜欢的猫粮是Whiskas的猫。当然,我可以编写一个自定义方法来查找具有特定属性的Cats,但是对于许多属性来说,这很麻烦;有没有一些通用的方法可以做到这一点?
我有一些复杂的对象,例如猫,它具有许多属性,例如年龄,最喜欢的猫粮等。
一堆猫被存储在Java集合中,我需要找到所有3岁的猫,或者那些最喜欢的猫粮是Whiskas的猫。当然,我可以编写一个自定义方法来查找具有特定属性的Cats,但是对于许多属性来说,这很麻烦;有没有一些通用的方法可以做到这一点?
试试共享资源集合 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
使用Java 8 lambda表达式,您可以执行类似操作
cats.stream()
.filter( c -> c.getAge() == 3 && c.getFavoriteFood() == WHISKAS )
.collect(Collectors.toList());
概念上与番石榴谓词方法相同,但使用lambda看起来更干净
对于OP来说,可能不是一个有效的答案,但对于有类似需求的人来说,值得注意。:)