使用比较器排序
Sorting using comparator
我需要使用 Java 8 Comparator
对下面的 Details class 对象列表进行排序
class Details{
String name;
String age;
}
按照详细信息 class 的姓名顺序如下首选项
1st--从字母表开始
第 2--以数字开头
和第 3-- 以特殊字符开头
预期结果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;
}
然后就可以在比较函数中使用了
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;
}
我需要使用 Java 8 Comparator
对下面的 Details class 对象列表进行排序
class Details{
String name;
String age;
}
按照详细信息 class 的姓名顺序如下首选项
1st--从字母表开始
第 2--以数字开头
和第 3-- 以特殊字符开头
预期结果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;
}
然后就可以在比较函数中使用了
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;
}