簡體   English   中英

如何按包含非英文字符的字段按字母順序對 ArrayList 進行排序? Java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM