有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    如果您试图做的是检查filt中的所有过滤器是否适用于qe,那么问题是现在您正在检查过滤器中的any是否满足其标准,然后退出该函数。换句话说,您要检查任何过滤器,而不是关闭所有过滤器。e、 g:

    public boolean satisfies(QuakeEntry qe) { 
        for(Filter f : filt) {
            if (f.satisfies(qe)) { // one of the filters worked, let's exit
                return true;
            }
        }
        return false;
    }
    

    如果需要检查所有筛选器是否应用于qe,则必须遍历filt中的整个筛选器列表

    public boolean satisfies(QuakeEntry qe) { 
        for(Filter f : filt){
            if (!f.satisfies(qe)) { // any of the filters criteria failed, then exit
                return false;
            }
        }
        return true; // the code will only reach this point if all the filters were applied
    } 
    

    如果您使用的是Java8+,则可以使用streams,例如

    public boolean satisfies(QuakeEntry qe) { 
        return filt.stream().allMatch(f -> f.satisfies(qe));
    }