我有一个 List
的 Strings
我想对它们进行排序:
ICD10DatabaseHandler icd10Helper = new ICD10DatabaseHandler(getActivity());
icd10Helper.open();
List<Strings> icd10Favorites = icd10Helper.getFavoriteIcd10Tags();
Collections.sort(icd10Favorites);
icd10Helper.close();
return true;
我的问题是我的 List
在 description
之前有一个 id
而我想要生成的是一种 List
忽略元素的第一个单词 (id
)。
实际输出
A000 Cholera due to Vibrio cholerae 01
A010 Typhoid fever with heart involvement
A012 Paratyphoid fever B
期望的输出:
A000 Cholera due to Vibrio cholerae 01
A012 Paratyphoid fever B
A010 Typhoid fever with heart involvement
如果不能使用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));
}
}
使用
Collections.sort(elements, new MyComparator<String>());
注意: 如果您必须多次使用,请创建一个实例而不是即时实例化
测试它
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);
}
}
结果:
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