我想按其字符串名称字段对我的对象列表进行排序。但是这些名称带有一些波兰字符,因此排序不正确。我对此问题进行了一些研究,发现应该使用类似以下内容的方法:
Collections.sort(myList, Collator.getInstance());
但是问题是它仅在我尝试对字符串列表进行排序时才有效。当我尝试对我的对象列表进行排序时,我得到了java.lang.ClassCastException
。
如何用波兰语字母顺序对我的对象列表进行排序?
我的对象看起来像这样:
public class MyObject implements Comparable<MyObject>{
private String name;
...
@Override
public int compareTo(@NonNull MyObject object) {
return name.compareTo(object.getName());
}
现在我尝试按以下方式对其进行排序:
List<MyObject> myList = DataProvider.getInstance().getListOfObjects();
Collections.sort(myList, Collator.getInstance());
答案 0 :(得分:2)
我相信Collator
documentation中有些含糊。
Collator
是Comparator<Object>
,但它实际上是为了表演
区域设置敏感的字符串比较 (强调我的)。
您可以在Collator#compare
具体实现的documentation中更好地看到这一点:
此实现仅返回compare
((String)o1, (String)o2)
。
您获得的ClassCastException
可能是由于MyObject
显然不是String
。
我会尝试在实际的Collator
实现中转移compareTo
的用法:
Collections.sort(myList);
...以及您的compareTo
实施中:
Collator.getInstance().compare(name, object.getName());
请注意,Collator.getInstance()
习惯用法使用默认的Locale
。
因此,如果您计划根据上下文使用多个Locale
来比较对象,那么最好使用允许注入Comparator
的自定义Locale
进行排序,并使用Collator
在幕后。
答案 1 :(得分:1)
Collator
用于比较字符串,您可以提取名称,然后将其传递给Collator
:
myList.sort((o1, o2) -> Collator.getInstance().compare(o1.getName(), o2.getName()));