我有两个课程如下;
Class ABC{
private String location;
private String address;
private String city;
private Food category;
.................
.................
// getters
// setters
}
Class XYZ{
public Collection<ABC> filterInput(String input){
Collection<ABC> result = new HashSet<ABC>();
if (criteria != null) {
try {
Analyzer analyzer = new WhitespaceAnalyzer();
// Now search the index:
IndexSearcher isearcher = new IndexSearcher(directory);
// Parse a simple query that searches for "text":
QueryParser parser = new MultiFieldQueryParser(new String[]{Index.CATEGORY.name(), Index.CITY.name(), Index.NAME.name()}, analyzer);
Query query = parser.parse(criteria) ;
TopDocCollector collector = new TopDocCollector(500);
isearcher.search(query, collector );
// Iterate through the results:
ScoreDoc[] hits = collector.topDocs().scoreDocs;
for (ScoreDoc hit : hits) {
Document document = isearcher.doc(hit.doc);
ABC entry = cache.get(Integer.valueOf(document.get(Index.OBJECT.name())));
results.add(entry);
}
isearcher.close();
} catch (Exception e) { }
}
好奇我在这里遗漏了什么吗?
我们将不胜感激任何帮助/建议。
答案 0 :(得分:2)
您必须以不区分大小写的方式实现hashcode
类的equals
和ABC
例如
int hashcode = 31*location.toUpperCase().hashcode();
对于equals
方法,您可以对字符串使用不区分大小写的等号:s1.equalsIgnoreCase(s2)
但是你仍然可以以任何你想要的方式坚持它们
答案 1 :(得分:0)
让你的setter应用upperCase或lowerCase会起作用。另一种可能性是实现Comparable并使equals方法使用equalsIgnoreCase。