web-dev-qa-db-ja.com

ローカリゼーションを使用した文字列のリストの並べ替え

ユーザーロケールごとに文字列のリストの下でソートしたい

_List<String> words = Arrays.asList(
      "Äbc", "äbc", "Àbc", "àbc", "Abc", "abc", "ABC"
    );
_

異なるユーザーロケールの場合、ソート出力は、ロケールごとに異なる必要があります。

上記のリストをユーザーロケールごとに並べ替える方法

私は試した

_Collections.sort(words , String.CASE_INSENSITIVE_ORDER);
_

しかし、これはローカライズでは機能しません。ロケールパラメータをCollections.sort()に渡す方法や、他の効率的な方法はありますか?

30
Rahul Agrawal

カスタムコンパレータで並べ替えを使用できます。 Collat​​orインターフェース を参照してください

_Collator coll = Collator.getInstance(locale);
coll.setStrength(Collator.PRIMARY);
Collections.sort(words, coll);
_

コレーターはコンパレーターであり、Collections.sort(...)メソッドに直接渡すことができます。

50
John Dvorak

これはあなたが使うべきものだと思います- Collator

Collat​​orクラスは、ロケールに依存する文字列比較を実行します。このクラスを使用して、自然言語テキストの検索とソートのルーチンを作成します。

コンパレータで次のようにしてください-

public int compare(String arg1, Sting arg2) {
    Collator usCollator = Collator.getInstance(Locale.US); //Your locale here
    usCollator.setStrength(Collator.PRIMARY);
    return usCollator.compare(arg1, arg2);
}

コンパレータのインスタンスをCollections.sortメソッドに渡します。

更新

@Jan Dvorakが言ったように、これは実際にはコンパレータなので、目的のロケールでインスタンスを作成し、強度を設定して、sortメソッドに渡すだけです。

Collactor usCollator = Collator.getInstance(Locale.US); //Your locale here
usCollator.setStrength(Collator.PRIMARY); //desired strength
Collections.sort(yourList, usCollator);
24
Bhesh Gurung
List<MODEL> ulke = new ArrayList<MODEL>();

    Collections.sort(ulke, new Comparator<MODEL>() {
        Collator collator = Collator.getInstance(new Locale("tr-TR"));
        @Override
        public int compare(MODEL o1, MODEL o2) {
            return collator.compare(o1.getULKEAD(), o2.getULKEAD());
        }
    });
2
Mehmet Onar