Abd*_*ull 6 java collections predicate
在Java中,我有一大堆对象(~10,000个对象),比方说Set<Person> cityInhabitants
.我还有一个大的谓词集合(~1,000个谓词),它们将用于过滤掉任何Person
匹配的谓词.例如,谓词可能是
person.getName().equals("ugly name1")
person.getName().equals("ugly name2")
person.getAge() < 18
.此要求需要以下挑战:
这些挑战有哪些解决方案?有没有可以帮助的图书馆?
我建议您按照执行速度的顺序对谓词进行排序。然后,您可以按速度顺序执行谓词,首先使用最快的谓词,通常意味着较慢的谓词将必须在较小的集合上运行。
然而,这个假设并不完全正确,您需要计算出删除的谓词对执行速度的百分比。然后我们可以看到哪个谓词删除的对象百分比最快。然后我们可以按照对我来说最优化的顺序执行谓词。
您可以轻松实现自己的谓词interface
public interface Predicate<T> {
boolean filter(T object);
}
Run Code Online (Sandbox Code Playgroud)
然后,您需要为每个规则创建谓词对象。您可以创建一些更动态的类来进行年龄和姓名检查,这也将减少您需要的代码量。
public class AgeCheck<T> implements Predicate<T> {
private final int min;
private final int max;
public AgeCheck(int min, int max) {
this.min = min;
this.max = max;
}
@Override
public boolean filter(T object) {
// if( t.age() < max && t.age > min) ...
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1476 次 |
最近记录: |