[英]How to sort ArrayList alphabetically by fields that contain non-english characters? Java
我有一個自定義對象的 ArrayList,我想按字母順序排序。 問題是我想要對其進行排序的字段有時包含非英文字符,例如á
或é
。 我想通過使用Collections.sort()
來做到這一點,但是使用這種方法,字段中包含非英語字符串的項目無法正確排序。
這是我嘗試過的:
public List<Video> sortDatabase(List<Video> videos){
List<Video> sortedList = new ArrayList<>(videos);
Collections.sort(sortedList, new Comparator<Video>() {
@Override
public int compare(Video video, Video t1) {
return video.getTitle().compareTo(t1.getTitle());
}
});
return orderedList;
}
編輯
我正在使用帶有minSdkVersion 21
的 Android Studio
我在這里找到了一個很好的答案。 這就是我的情況:
public List<Video> sortDatabase(List<Video> videos){
List<Video> sortedList = new ArrayList<>(videos);
orderedList.sort(new VideoComparator());
return orderedList;
}
private static class VideoComparator implements Comparator<Video>{
Collator spCollator = Collator.getInstance(new Locale("hu", "HU"));
public int compare (Video e1, Video e2){
return spCollator.compare(e1.getTitle(), e2.getTitle());
}
}
就我而言,必須使用("hu", "HU")
構建語言環境。 您可以在此處查看所有支持的語言
此解決方案工作正常,但是,我嘗試將其用於 Android 應用程序,其中此方法僅適用於 API 24 級或更高級別。 因此,如果有人有不同的解決方案,我將把它作為公認的答案。
但是使用這種方法,字段中包含非英語(原文如此)字符串的項目無法正確排序。
你確定這是問題嗎? 會不會是你不明白排序涉及什么? 我很確定問題是字符的 Unicode 值。 字符按字符集組織。 整個英文字符的 Unicode 值低於或高於其他語言字符,從而給人以排序錯誤的印象。
也許你應該看看Unicode 圖表來完全理解我在說什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.