使用本地化排序字符串列表

Rah*_*wal 27 java sorting collections locale localization

我想按照用户区域设置排序下面的字符串列表

List<String> words = Arrays.asList(
      "Äbc", "äbc", "Àbc", "àbc", "Abc", "abc", "ABC"
    );
Run Code Online (Sandbox Code Playgroud)

对于不同的用户区域设置,排序输出应根据区域设置而有所不同.

如何按用户区域设置对上面的列表进行排序?

我试过了

Collections.sort(words , String.CASE_INSENSITIVE_ORDER);
Run Code Online (Sandbox Code Playgroud)

但是这不适用于本地化,那么如何将locale参数传递给Collections.sort()或者还有其他有效方法吗?

Joh*_*rak 50

您可以使用自定义Comparator进行排序.请参阅Collat​​or界面

Collator coll = Collator.getInstance(locale);
coll.setStrength(Collator.PRIMARY);
Collections.sort(words, coll);
Run Code Online (Sandbox Code Playgroud)

整理器是比较器,可以直接传递给Collections.sort(...)方法.

  • @kerem 你为什么删除归因? (2认同)

Bhe*_*ung 26

我认为这应该是你应该使用的 - Collator

Collat​​or类执行区分区域敏感的String比较.您可以使用此类为自然语言文本构建搜索和排序例程.

在比较器中执行以下操作 -

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);
}
Run Code Online (Sandbox Code Playgroud)

并传递比较器实例的Collections.sort方法.

更新

就像@Jan Dvorak说的那样,它实际上是一个比较器,所以你可以用所需的语言环境创建它,设置强度并传递sort方法:

Collactor usCollator = Collator.getInstance(Locale.US); //Your locale here
usCollator.setStrength(Collator.PRIMARY); //desired strength
Collections.sort(yourList, usCollator);
Run Code Online (Sandbox Code Playgroud)


Meh*_*nar 5

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());
        }
    });
Run Code Online (Sandbox Code Playgroud)