我必须构建一个过滤器,给定一些元素(博物馆对象)只返回来自特定房间和特定世纪的过滤器。我在两个函数之前构建:第一个仅在房间上应用过滤器,第二个仅在世纪上应用,并且两者都正确工作(它们将正确匹配的对象放在名为 filtrati 的ArrayList中) 。这是我实现目标的“第三个功能”:
public Set < Pezzo > filtraSalaSecolo(String sala, int secolo)
throws IOException {
Set < Pezzo > filtrati = new HashSet();
for (Iterator < Pezzo > i = parse().iterator(); i.hasNext();) {
Pezzo next = i.next();
if (filtraSala(sala).contains(next) == true && filtraSecolo(
secolo).contains(next) == true) {
filtrati.add(next);
}
}
return filtrati;
}
在此代码中Pezzo
将是博物馆对象数据的数据结构。代码不能很好地工作,因为测试(下面报告)没有输出。我不明白为什么。
public class FiltraSalaSecoloTest {
public static void main(String[] args) throws IOException {
Filtri f = new Filtri();
f.setFilePath(IFile.PATH_MUSEO);
for (Iterator < Pezzo > i = f.filtraSalaSecolo(
"Sala delle scienze moderne", 20).iterator(); i.hasNext();) {
Pezzo next = i.next();
System.out.println(next.getAnno() + "\t" + next.getSala());
}
}
}
答案 0 :(得分:0)
你的问题是(猜测这里,因为没有给出代码)你的parse()
方法可能每次都返回新对象,所以当你试图过滤时,你问的是如果来自一个parse()
的对象包含在另一个hashCode()
的对象集中。除非您实施equals()
和public Set < Pezzo > filtraSalaSecolo(String sala, int secolo)
throws IOException {
Set < Pezzo > all = parse();
Set < Pezzo > f1 = filtraSala(sala, all);
Set < Pezzo > filtrati = filtraSecolo(secolo, f1);
return filtrati;
}
方法,否则答案将始终为否。
相反,您需要解析一次,然后过滤解析后的结果。即)
Set<Pezzo>
并为filtraSala
和filtraSecolo
方法添加filtraSalaSecolo
参数,该方法是要过滤的集合。
继续重构,Set<Pezzo> filtrati = filtraSalaSecolo(sala, secolo, parse());
也应该有这个额外的参数,因此它可以被称为:
<input type="hidden" id="listid" name="listid" value="{{ $list->id }}">