排序时如何忽略第一个Word

Emi*_*aña 2 java sorting android

我有一个List,Strings我想对它们进行排序:

ICD10DatabaseHandler icd10Helper = new ICD10DatabaseHandler(getActivity());
            icd10Helper.open();
            List<Strings> icd10Favorites = icd10Helper.getFavoriteIcd10Tags();
            Collections.sort(icd10Favorites);
            icd10Helper.close();
            return true;
Run Code Online (Sandbox Code Playgroud)

我的问题是我List有一个id之前description和我想要产生的是一种List忽略id元素的第一个单词().

实际输出

A000 Cholera due to Vibrio cholerae 01 
A010 Typhoid fever with heart involvement
A012 Paratyphoid fever B
Run Code Online (Sandbox Code Playgroud)

期望的输出:

A000 Cholera due to Vibrio cholerae 01 
A012 Paratyphoid fever B
A010 Typhoid fever with heart involvement
Run Code Online (Sandbox Code Playgroud)

Jor*_*lla 5

如果你不能使用java8,你需要定义自己的Comparator,例如:

class MyComparator<T> implements Comparator<String> {
    private static String getDescription(String s) {
        // get all String after CODE
        String[] all = s.split(" ", 2);

        // if there is some content
        if (all.length >= 2) 
            // get it in LOWER CASE
            return all[1].toLowerCase();
        else 
            return "";
    }

    public int compare(String s0, String s1) {
        return getDescription(s0).compareTo(getDescription(s1));
    }

}
Run Code Online (Sandbox Code Playgroud)

使用

Collections.sort(elements, new MyComparator<String>());
Run Code Online (Sandbox Code Playgroud)

注意: 如果必须多次使用,请创建实例,而不是实时实例化


测试它

public static void main(String[] args) {
    System.out.println("BEFORE SORTING");
    printList(elements);

    Collections.sort(elements, new MyComparator<String>());

    System.out.println("\nAFTER SORTING");
    printList(elements);
}

private static void printList(List<String> list) {
    for (String s : list) {
        System.out.println(s);
    }

}
Run Code Online (Sandbox Code Playgroud)

结果:

BEFORE SORTING
A012 Paratyphoid fever B
A010 Typhoid fever with heart involvement
A000 Cholera due to Vibrio cholerae 01

AFTER SORTING
A000 Cholera due to Vibrio cholerae 01
A012 Paratyphoid fever B
A010 Typhoid fever with heart involvement
Run Code Online (Sandbox Code Playgroud)