如何使对象集合不敏感?

时间:2014-01-17 19:30:32

标签: java collections lucene indexing

我有两个课程如下;

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) { }

}

好奇我在这里遗漏了什么吗?

我们将不胜感激任何帮助/建议。

2 个答案:

答案 0 :(得分:2)

您必须以不区分大小写的方式实现hashcode类的equalsABC 例如

int hashcode = 31*location.toUpperCase().hashcode();

对于equals方法,您可以对字符串使用不区分大小写的等号:s1.equalsIgnoreCase(s2)

但是你仍然可以以任何你想要的方式坚持它们

答案 1 :(得分:0)

让你的setter应用upperCase或lowerCase会起作用。另一种可能性是实现Comparable并使equals方法使用equalsIgnoreCase。