Java 排序图<;字符串,对象>;用钥匙和IgnoreCase?
嗯,我测试了TreeMap,但它没有考虑IgnoreCase对字符串的比较。我需要按字典顺序排列,忽略大小写。还有别的办法吗 谢谢,这很有效(TreeMap(comparatorc))。不过,我还有一个问题:Java 排序图<;字符串,对象>;用钥匙和IgnoreCase?,java,sorting,collections,string-comparison,treemap,Java,Sorting,Collections,String Comparison,Treemap,嗯,我测试了TreeMap,但它没有考虑IgnoreCase对字符串的比较。我需要按字典顺序排列,忽略大小写。还有别的办法吗 谢谢,这很有效(TreeMap(comparatorc))。不过,我还有一个问题: public final Comparator<Object> STR_IGN_CASE_COMP = new Comparator<Object>() { public int compare(Object h1, Object h2) {
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
public final Comparator STR\u IGN\u CASE\u COMP=new Comparator(){
公共整数比较(对象h1、对象h2){
字符串s1=h1.getId();
字符串s2=h2.getId();
返回s1.compareToIgnoreCase(s2);
}
}; //结构设计案例公司
如何将比较器通用化以处理不同的对象?假设所有对象都有getId()方法
谢谢,
Martin为它提供了一个比较器,用于比较忽略大小写的字符串
TreeMap(Comparator c)如果您有一个列表,我会说使用Comparator尝试Collections.sort()。您可能需要使用String.equalsIgnoreCase()而不是equals()来滚动自己的比较器
公共静态无效排序(列表,
Comparator最好的方法是使用Collator。Collator是一个内置类,它也实现Comparable,因此您可以将它用于树映射
使用collator,您还可以控制比较的强度,例如,如果您还希望不区分重音的话
Collator stringCollator = Collator.getInstance();
stringCollator.setStrength(Collator.PRIMARY);
new TreeMap<String, String>(stringCollator)
Collator-stringCollator=Collator.getInstance();
紧定器固定强度(主紧定器);
新树形图(stringCollator)
是的,您想要的是使用接受比较器的树映射构造函数。创建使用compareToIgnoreCase的比较器。我怀疑您应该使用自定义比较器构造树映射
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);
}
}
import java.text.Collator;
导入java.util.Comparator;
类IgnoreCaseComp实现Comparator{
颈缩孔;
IgnoreCaseComp(){
col=Collator.getInstance();
col.setStrength(Collator.PRIMARY);
}
公共整数比较(字符串strA、字符串strB){
返回列比较(strA、strB);
}
}
您想在中使用。特别是,请查看
使用或自定义比较器
在非英语地区或需要更复杂的排序时,可能更适合您
我怎样才能使比较器普遍化
使用不同的对象?
假设所有对象都有getId()方法
您应该能够使用。Martin,完全更改问题不是一个好主意。下一个有权这样做的用户(可能是您)应该将其恢复到以前的状态。只需发布一个新问题!+1,同意,当有人回答您的问题时,您应该接受该答案,如果出现新问题,则应转到新问题。问题似乎已“向前滚动”同样,该问题不再与任何答案匹配。我建议将该问题还原为原始问题,并发布一个新问题;如果出现这种情况,则可能也应删除该答案。请记住,如果您是一名英语程序员,并且您可以控制键,则不必担心语言环境,如没有对值进行比较,而是对键进行比较;-)
Collator stringCollator = Collator.getInstance();
stringCollator.setStrength(Collator.PRIMARY);
new TreeMap<String, String>(stringCollator)
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);
}
}
TreeMap map = new TreeMap(String.CASE_INSENSITIVE_ORDER);