ユーザーロケールごとに文字列のリストの下でソートしたい
_List<String> words = Arrays.asList(
"Äbc", "äbc", "Àbc", "àbc", "Abc", "abc", "ABC"
);
_
異なるユーザーロケールの場合、ソート出力は、ロケールごとに異なる必要があります。
上記のリストをユーザーロケールごとに並べ替える方法
私は試した
_Collections.sort(words , String.CASE_INSENSITIVE_ORDER);
_
しかし、これはローカライズでは機能しません。ロケールパラメータをCollections.sort()
に渡す方法や、他の効率的な方法はありますか?
カスタムコンパレータで並べ替えを使用できます。 Collatorインターフェース を参照してください
_Collator coll = Collator.getInstance(locale);
coll.setStrength(Collator.PRIMARY);
Collections.sort(words, coll);
_
コレーターはコンパレーターであり、Collections.sort(...)
メソッドに直接渡すことができます。
これはあなたが使うべきものだと思います- Collator
Collatorクラスは、ロケールに依存する文字列比較を実行します。このクラスを使用して、自然言語テキストの検索とソートのルーチンを作成します。
コンパレータで次のようにしてください-
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);
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());
}
});