好吧,我测试了TreeMap,但它没有考虑字符串比较中的IgnoreCase。我需要按字典顺序排序并忽略大小写。还有其他办法吗?
谢谢,这是有效的(TreeMap(Comparator c))。但是,我有另一个问题:
public final Comparator<Object> STR_IGN_CASE_COMP = new Comparator<Object>() {
public int compare(Object h1, Object h2) {
String s1 = h1.getId();
String s2 = h2.getId();
return s1.compareToIgnoreCase(s2);
}
}; //STR_IGN_CASE_COMP
如何将比较器用于不同的对象?假设所有人都有getId()方法。
谢谢, 马丁
答案 0 :(得分:37)
您想在Comparator
中使用TreeMap
constructor。请特别注意String.CASE_INSENSITIVE_ORDER
。
TreeMap map = new TreeMap(String.CASE_INSENSITIVE_ORDER);
使用Collator
或自定义Comparator
可能会在非英语语言环境中更好地为您工作,或者您需要更复杂的排序。
答案 1 :(得分:7)
最好的方法是使用Collator。 collator是一个内置类,它也实现了Comparable,因此你可以将它用于你的TreeMap。
使用collator,您还可以控制比较的强度,例如,如果您想要对重音不敏感。
Collator stringCollator = Collator.getInstance();
stringCollator.setStrength(Collator.PRIMARY);
new TreeMap<String, String>(stringCollator)
答案 2 :(得分:1)
为它提供比较字符串大小写的比较器。
TreeMap(比较器c)
答案 3 :(得分:0)
如果您有一个列表,我会说使用Comparator尝试Collections.sort()。您可能必须使用String.equalsIgnoreCase()而不是equals()来滚动自己的Comparator。
public static <T> void sort(List<T> list,
Comparator<? super T> c)
但我走在正确的轨道上。尝试使用Comparator的TreeMap构造函数:
public TreeMap(Comparator<? super K> comparator)
答案 4 :(得分:0)
是的,你想要的是使用带有比较器的TreeMap构造函数。制作一个使用compareToIgnoreCase的比较器。
答案 5 :(得分:0)
我怀疑你应该使用自定义比较器构建TreeMap
。
import java.text.Collator;
import java.util.Comparator;
class IgnoreCaseComp implements Comparator<String> {
Collator col;
IgnoreCaseComp() {
col = Collator.getInstance();
col.setStrength(Collator.PRIMARY);
}
public int compare(String strA, String strB) {
return col.compare(strA, strB);
}
}
答案 6 :(得分:0)
如何对比较器进行通用化 使用不同的对象? 假设所有人都有getId()方法。
您应该可以使用BeanComparator。