Java 排序图<;字符串,对象>;用钥匙和IgnoreCase?

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

嗯,我测试了TreeMap,但它没有考虑IgnoreCase对字符串的比较。我需要按字典顺序排列,忽略大小写。还有别的办法吗

谢谢,这很有效(TreeMap(comparatorc))。不过,我还有一个问题:

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);