Java 如何使对象集合区分大小写?
我有两门课,如下所示Java 如何使对象集合区分大小写?,java,collections,lucene,indexing,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&g
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) { }
}
ABC类{
私有字符串位置;
私有字符串地址;
私人城市;
私人食品类别;
.................
.................
//吸气剂
//二传手
}
XYZ类{
公共集合筛选器输入(字符串输入){
收集结果=新的HashSet();
如果(条件!=null){
试一试{
Analyzer Analyzer=新的空白分析器();
//现在搜索索引:
IndexSearcher isearcher=新的IndexSearcher(目录);
//分析搜索“文本”的简单查询:
QueryParser parser=新的多字段QueryParser(新字符串[]{Index.CATEGORY.name(),Index.CITY.name(),Index.name.name(),analyzer);
Query=parser.parse(条件);
TopDocCollector=新的TopDocCollector(500);
搜索(查询、收集器);
//反复查看结果:
ScoreDoc[]hits=collector.topDocs().scoreDocs;
对于(ScoreDoc命中率:命中率){
Document Document=isearcher.doc(hit.doc);
ABC entry=cache.get(Integer.valueOf(document.get(Index.OBJECT.name()));
结果。添加(条目);
}
isearcher.close();
}捕获(例外e){}
}
很好奇,我是不是遗漏了什么?
任何帮助/建议都将不胜感激。让您的设置者应用大写或小写都可以。另一种可能性是实现Comparable并让equals方法使用equalsIgnoreCase。您必须在case中实现
ABC
类的hashcode
和equals
麻木不仁的态度
比如说
int hashcode = 31*location.toUpperCase().hashcode();
对于equals
方法,可以对字符串使用不区分大小写的equals:s1.equalsIgnoreCase(s2)
但是你仍然可以用你想要的任何方式来保存它们你想用集合元素做什么?你想实现什么?@AlexanderGavrilov使用集合元素,我将搜索/解析它,并对它执行一些类似的操作。我喜欢你的toUpperCase()我知道你说的不区分大小写是什么意思,关于什么时候向集合中添加一个项目?@RobertBeltran谢谢…但是我在寻找一种方法使集合不区分大小写吗?我知道CaseSinessitiveHashMap,但不确定HashSet…你说得对,实现了
hashCode
和equals
方法,但我在寻找我将集合实现为不区分大小写,而不是修改类ABC.-1这根本不是一个好主意,因为他不想以不区分大小写的方式说一个对象等于另一个对象。您正在修改classI doub,这是可能的,因为不同的集合不知道任何内部工作这是一个很好的理由,因为它们将依赖于您放入其中的类的实现-->它们不会universal@nachokk他也没有说相反的话:)没错,我会取消我的否决票,但我仍然认为这不是他想要的,因此不是一个解决方案。