Java 用比较器排序
我需要在下面的详细信息列表中使用Java8Comparator对类对象进行排序Java 用比较器排序,java,list,comparator,Java,List,Comparator,我需要在下面的详细信息列表中使用Java8Comparator对类对象进行排序 class Details{ String name; String age; } 按照详细信息的顺序,类的名称如下所示 第一,从字母开始 第二,从数字开始 第三,从特殊角色开始 预期结果s/b: 排序的详细信息列表=根据详细信息名称排序,而不考虑类中的其他参数 "Came" "result" "Result came" "01 R
class Details{
String name;
String age;
}
按照详细信息的顺序,类的名称如下所示
第一,从字母开始
第二,从数字开始
第三,从特殊角色开始
预期结果s/b:
排序的详细信息列表=根据详细信息名称排序,而不考虑类中的其他参数
"Came"
"result"
"Result came"
"01 Result"
"02 Result"
"05 Result"
"# Came"
"# Result"
您可以像这样定义自定义优先级
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 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;
}
到目前为止你试过什么?
var a = List.of(details1, details2, details3)
.stream()
.sorted(Comparator.comparingInt((Details d) -> priority(d.getName())).thenComparing(Details::getName))
.collect(Collectors.toList());
private static int priority(String str){
return Character.isAlphabetic(str.charAt(0))?1:Character.isDigit(str.charAt(0))?2:3;
}