[英]Sorting using comparator
我需要使用 Java 8 比較器對以下詳細信息class 對象列表進行排序
class Details{
String name;
String age;
}
按照詳細信息類名稱的順序,如下所示
第一——從字母開始
2nd——以數字開頭
和 3rd-- 以特殊字符開頭
預期結果 s/b:已排序的詳細信息列表 = 根據詳細信息名稱排序,與 class 中的其他參數無關
"Came"
"result"
"Result came"
"01 Result"
"02 Result"
"05 Result"
"# Came"
"# Result"
Collections.sort(List.o(details1,details2,details3),(d1,d2)->{
// got stuck here what to include to achieve the sort as per my requirement
return d1.getName().compareTo(d2.getName());
});
您可以像這樣定義自定義優先級
private static int priority(String str){
if (Character.isAlphabetic(string.charAt(0)))return 1;
if (Character.isDigit(string.charAt(0))) return 2;
return 3;
}
然后你可以在比較中使用 function
Collections.sort(list, new Comparator<Project>() {
@Override
public int compare(Details o1, Details o2) {
int result = Integer.compare(priority(o1.name), priority(o2.name));
if (result != 0) return result;
return o1.name.compareTo(o2.name);
}
});
使用 java 8 語法
Collections.sort(list,Comparator.comparingInt(d -> priority(d.getName()))
.thenComparing(d-> d.getName()));
這是 Java 11(剛剛使用 var,就是這樣)代碼:
var a = List.of(details1, details2, details3)
.stream()
.sorted(Comparator.comparingInt((Details d) -> priority(d.getName())).thenComparing(Details::getName))
.collect(Collectors.toList());
如果優先方法難以理解,可以參考@Eklavya 的代碼
private static int priority(String str){
return Character.isAlphabetic(str.charAt(0))?1:Character.isDigit(str.charAt(0))?2:3;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.