10

さて、私は 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() メソッドを持っていると仮定します。

ありがとう、マーティン

4

7 に答える 7

37

コンストラクターComparatorで aを使用したい。特に、 を見てください。TreeMapString.CASE_INSENSITIVE_ORDER

TreeMap map = new TreeMap(String.CASE_INSENSITIVE_ORDER);

英語以外のロケールで使用する場合や、より複雑な順序が必要な場合は、Collatorまたはカスタムを使用する方が適切に機能する場合があります。Comparator

于 2009-11-07T01:35:40.507 に答える
8

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

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

Collator stringCollator = Collator.getInstance();
stringCollator.setStrength(Collator.PRIMARY); 
new TreeMap<String, String>(stringCollator)
于 2009-11-07T01:34:44.967 に答える
1

コンパレーターをユニバーサル化して、さまざまなオブジェクトを操作するにはどうすればよいですか? すべてが getId() メソッドを持っていると仮定します。

BeanComparatorを使用できるはずです。

于 2009-11-07T02:39:01.980 に答える
1

大文字と小文字を区別しない文字列を比較する Comparator を提供します。

TreeMap(コンパレーターc)

于 2009-11-07T01:34:19.147 に答える
0

リストがある場合は、Collections.sort() を Comparator で試してください。equals() の代わりに String.equalsIgnoreCase() を使用する独自の Comparator をロールする必要がある場合があります。

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

しかし、私は正しい軌道に乗っていました。Comparator を取る TreeMap コンストラクターを試してください。

public TreeMap(Comparator<? super K> comparator)
于 2009-11-07T01:34:27.563 に答える
0

はい、あなたが望むのは、コンパレータを取る TreeMap コンストラクタを使用することです。compareToIgnoreCase を使用するコンパレータを作成します。

于 2009-11-07T01:34:53.317 に答える
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);
  }
}
于 2009-11-07T01:35:28.557 に答える