使用比较器排序

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;
      }