Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用比较器排序_Java_List_Comparator - Fatal编程技术网

Java 用比较器排序

Java 用比较器排序,java,list,comparator,Java,List,Comparator,我需要在下面的详细信息列表中使用Java8Comparator对类对象进行排序 class Details{ String name; String age; } 按照详细信息的顺序,类的名称如下所示 第一,从字母开始 第二,从数字开始 第三,从特殊角色开始 预期结果s/b: 排序的详细信息列表=根据详细信息名称排序,而不考虑类中的其他参数 "Came" "result" "Result came" "01 R

我需要在下面的详细信息列表中使用Java8Comparator对类对象进行排序


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