java如何让MatchAllFilter正常工作并向MatchAllFilter添加其他筛选器?
我认为我创建的MatchAllFilter类没有正确地存储我试图添加到其中的过滤器。当我在中传递一个列表时,没有一个过滤器工作。如何正确地将其他过滤器存储到MatchAllFitters中,并将过滤器存储在maf中,以过滤我将要传递的列表?我已经一个接一个地测试了我所有的过滤器;我知道它们有用
public class MatchAllFilter implements Filter {
private ArrayList<Filter>filt;
private String nameF;
public MatchAllFilter(){
filt= new ArrayList<Filter>();
}
public void addFilter(Filter f){
filt.add(f);
}
public boolean satisfies(QuakeEntry qe) {
for(Filter f:filt){
if (f.satisfies(qe)){
return true;
}
}
return false;
}
}
public void testMatchAllFilter(){
EarthQuakeParser parser = new EarthQuakeParser();
//String source = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.atom";
String source = "data/nov20quakedatasmall.atom";
ArrayList<QuakeEntry> list = parser.read(source);
MatchAllFilter maf=new MatchAllFilter();
double depthMin=-100000.0;
double depthMax=-10000.0;
Filter f= new DepthFilter(-100000.0,-10000.0);
maf.addFilter(f);
Filter e= new MagnitudeFilter(0.0, 2.0);
maf.addFilter(e);
Filter g= new PhraseFilter("any","a");
maf.addFilter(g);
//ArrayList<QuakeEntry>m10= filter(list,maf);
//for (QuakeEntry qe: list) {
//System.out.println(qe);
System.out.println(maf);
}
# 1 楼答案
如果您试图做的是检查
filt
中的所有过滤器是否适用于qe
,那么问题是现在您正在检查过滤器中的any
是否满足其标准,然后退出该函数。换句话说,您要检查任何过滤器,而不是关闭所有过滤器。e、 g:如果需要检查所有筛选器是否应用于
qe
,则必须遍历filt
中的整个筛选器列表如果您使用的是Java8+,则可以使用
streams
,例如