Sat*_*tya 11 java collections case-insensitive
在我的Java应用程序中,我需要比较两个列表的元素是否相似.
简而言之,假设我有两个列表如下所示
List<String> a = new ArrayList<String>();
a.add("one");
a.add("three");
a.add("two");
Collections.sort(a);
List<String> a1 = new ArrayList<String>();
a1.add("ONE");
a1.add("two");
a1.add("THREE");
Collections.sort(a);
Run Code Online (Sandbox Code Playgroud)
如果我写了一个相等的条件,它会失败,因为列表的某些元素在不同的情况下就像
if(a.equals(a1)){
System.out.println("equal");
} else{
System.out.println("not equal");
}
Run Code Online (Sandbox Code Playgroud)
它将显示结果"不相等"
所以请告诉我如何使列表元素仅用Java语言不区分大小写.
谢谢
Rid*_*del 22
为什么不使用具有不区分大小写的比较器的SortedSet?使用String.CASE_INSENSITIVE_ORDER比较器
您的代码减少到
Set<String> a = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
a.add("one");
a.add("three");
a.add("two");
Set<String> a1 = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
a1.add("ONE");
a1.add("two");
a1.add("THREE");
Run Code Online (Sandbox Code Playgroud)
而你的平等条件应该没有任何问题
编辑根据评论修改.感谢大家纠正我.
Jon*_*man 14
你需要使用
Collections.sort(a, String.CASE_INSENSITIVE_ORDER);
Run Code Online (Sandbox Code Playgroud)
为了对忽略大小写进行排序,可以使用String上的equalsIgnoreCase方法来比较值
您当然可以创建自己的CaseInsensitiveList类,我们的代码库中有一个CaseInsensitiveSet和CaseInsensitiveMap
您必须手动执行此操作:
public boolean equalsIgnoreCase(List<String> l1, List<String> l2) {
if (l1.size() != l2.size()) {
return false;
}
Iterator<String> i1=l1.iterator();
Iterator<String> i2=l2.iterator();
while(i1.hasNext()) {
if (!i1.next().equalsIgnoreCase(i2.next()) {
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
您还可以将String包装到辅助类中,并为其实现equals&compare方法.
public class StringWrapper implements Comparable<StringWrapper> {
private String value;
StringWrapper(Strig value) {
this.value = value;
}
@Override boolean equals(Object o) {
returns String.CASE_INSENSITIVE_ORDER.equals(
(StringWrapper) o).value
this.value);
}
@Override int compareTo(StringWrapper sw) {
returns String.CASE_INSENSITIVE_ORDER.compare(
this.value
sw.value);
}
@Override String toString() {
return this.value;
}
@Override int hashCode() {
return this.value.toLowerCase.hashCode();
}
}
And then :
List<StringWrapper> a = new ArrayList<StringWrapper>();
a.add(StringWrapper("one"));
a.add(StringWrapper("TWO"));
a.add(StringWrapper("three"));
Collections.sort(a);
Run Code Online (Sandbox Code Playgroud)