2009-11-07 17 views
7

さて、TreeMapをテストしましたが、文字列比較でIgnoreCaseを考慮していません。私は辞書編集で注文し、大文字小文字を無視する必要があります。他の方法はありますか?マップを<String、Object>のキーで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()メソッドを持っていると仮定します。

おかげで、 マーティン

+7

Martin、質問を完全に変更するのは良い考えではありません。それを行う特権を持つ次のユーザー(おそらくあなた)は、それを以前の状態に戻す必要があります。新しい質問を投稿するだけです! –

+1

+1、誰かがあなたの質問に答えてくれたら、あなたは答えを受け入れ、新しい質問が発生したらそれに進むべきです。 – camickr

+0

私はそれをロールバックしました。 – finnw

答えて

34

あなたはTreeMap constructorComparatorを使用したいです。特に、String.CASE_INSENSITIVE_ORDERをご覧ください。

TreeMap map = new TreeMap(String.CASE_INSENSITIVE_ORDER); 

Collatorを使用したり、カスタムComparatorが英語以外のロケールにしたり、より複雑な順序付けが必要な場合は、あなたのために良い仕事があります。

+2

'String.CASE_INSENSITIVE_ORDER'へのリンクは+1です。 – tangens

+0

覚えておいてください - あなたが英語のプログラマーで、ロケールについて心配する必要のないキーを管理している場合、比較は値に対して行われていないので、それらはキー;-) –

1

はそれを無視した文字列のケースを比較するコンパレータを提供します。

のTreeMap(コンパレータC)

0

あなたがリストを持っていた場合、私はコンパレータをCollections.sortを()してみてくださいと言うでしょう。 equals()の代わりにString.equalsIgnoreCase()を使用する独自のComparatorをロールバックする必要があるかもしれません。

public static <T> void sort(List<T> list, 
         Comparator<? super T> c) 

しかし、私は正しい軌道に乗っていました。コンパイラを使用するTreeMapコンストラクタを試してください:

public TreeMap(Comparator<? super K> comparator) 
6

最も良い方法はCollat​​orを使用することです。照合は組み込みクラスで、Comparableも実装されているため、TreeMapに使用できます。

コレータを使用すると、アクセントを区別したくない場合など、比較の強度を制御することもできます。

Collator stringCollator = Collator.getInstance(); 
stringCollator.setStrength(Collator.PRIMARY); 
new TreeMap<String, String>(stringCollator) 
0

はい、コンパレータを使用するTreeMapコンストラクタを使用します。 compareToIgnoreCaseを使用するコンパレータを作成します。

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

コンパレータ を別のオブジェクトで使用するにはどうすればよいですか? はすべてがgetId()メソッドを持っていると仮定します。

BeanComparatorを使用することができます。

+0

質問を元の質問に戻し、新しい質問を代わりに投稿することをお勧めしました。もしそれが起こると、この答えはおそらくも取り除かれるべきです。 –

関連する問題