Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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中按字段对自定义对象类进行多重排序 package com.learnjava; 导入java.io.IOException; 导入java.nio.file.Files; 导入java.nio.file.path; 导入java.util.array; 导入java.util.Collections; 导入java.util.Comparator; 导入java.util.List; 导入java.util.Scanner; 导入java.util.stream.stream; 公共类EmployeeSortByGroup{ 公共静态无效排序EmployeeByGRP(列出人员,字符串[]排序){ 对于(int i=0;i_Java_Sorting_Chained - Fatal编程技术网

java中按字段对自定义对象类进行多重排序 package com.learnjava; 导入java.io.IOException; 导入java.nio.file.Files; 导入java.nio.file.path; 导入java.util.array; 导入java.util.Collections; 导入java.util.Comparator; 导入java.util.List; 导入java.util.Scanner; 导入java.util.stream.stream; 公共类EmployeeSortByGroup{ 公共静态无效排序EmployeeByGRP(列出人员,字符串[]排序){ 对于(int i=0;i

java中按字段对自定义对象类进行多重排序 package com.learnjava; 导入java.io.IOException; 导入java.nio.file.Files; 导入java.nio.file.path; 导入java.util.array; 导入java.util.Collections; 导入java.util.Comparator; 导入java.util.List; 导入java.util.Scanner; 导入java.util.stream.stream; 公共类EmployeeSortByGroup{ 公共静态无效排序EmployeeByGRP(列出人员,字符串[]排序){ 对于(int i=0;i,java,sorting,chained,Java,Sorting,Chained,使用 您现在可以轻松地增强解析以支持降序排序,例如,通过在字段名后添加一个-减号,这样“firstname-;age”将按firstname降序排序,然后按age升序排序 // You will now use it like this. No need for using a List Arrays.sort(persons, parsePersonSortBy(sortByString)); publicstaticcomparatorparsesortby(stringsortby,fu

使用

您现在可以轻松地增强解析以支持降序排序,例如,通过在字段名后添加一个
-
减号,这样
“firstname-;age”
将按
firstname
降序排序,然后按
age
升序排序

// You will now use it like this. No need for using a List
Arrays.sort(persons, parsePersonSortBy(sortByString));
publicstaticcomparatorparsesortby(stringsortby,functionfieldcomparatormapper){
比较器sortComparator=null;
for(字符串字段:sortBy.split(“;”)){
布尔降序=字段.endsWith(“-”);
比较器c=fieldComparatorMapper.apply(降序?field.substring(0,field.length()-1):字段);
如果(降序)
c=c.反向();
sortComparator=(sortComparator==null?c:sortComparator.ThenComparating(c));
}
返回排序比较程序;
}

生成一个
Map@SanjayKumarNayak不要在评论中添加额外信息。编辑问题(问题下方的灰色链接)以澄清问题。
public static Comparator<Person> parseSortBy(String sortBy) {
    Comparator<Person> sortComparator = null;
    for (String field : sortBy.split(";")) {
        Comparator<Person> c;
        switch (field) {
            case "firstname":
                c = Comparator.comparing(Person::getFirstName);
                break;
            case "lastname":
                c = Comparator.comparing(Person::getLastName);
                break;
            case "age":
                c = Comparator.comparingInt(Person::getAge);
                break;
            case "country":
                c = Comparator.comparing(Person::getCountry);
                break;
            default:
                throw new IllegalArgumentException("Unknown sort spec: " + field);
        }
        sortComparator = (sortComparator == null ? c : sortComparator.thenComparing(c));
    }
    return sortComparator;
}
public static Comparator<Person> parsePersonSortBy(String sortBy) {
    return parseSortBy(sortBy, field -> {
        switch (field) {
            case "firstname": return Comparator.comparing(Person::getFirstName);
            case "lastname":  return Comparator.comparing(Person::getLastName);
            case "age":       return Comparator.comparingInt(Person::getAge);
            case "country":   return Comparator.comparing(Person::getCountry);
            default: throw new IllegalArgumentException("Unknown sort spec: " + field);
        }
    });
}
// The following method should be in a separate helper class for reusability
public static <E> Comparator<E> parseSortBy(String sortBy, Function<String, Comparator<E>> fieldComparatorMapper) {
    Comparator<E> sortComparator = null;
    for (String field : sortBy.split(";")) {
        Comparator<E> c = fieldComparatorMapper.apply(field);
        sortComparator = (sortComparator == null ? c : sortComparator.thenComparing(c));
    }
    return sortComparator;
}
// You will now use it like this. No need for using a List
Arrays.sort(persons, parsePersonSortBy(sortByString));
public static <E> Comparator<E> parseSortBy(String sortBy, Function<String, Comparator<E>> fieldComparatorMapper) {
    Comparator<E> sortComparator = null;
    for (String field : sortBy.split(";")) {
        boolean descending = field.endsWith("-");
        Comparator<E> c = fieldComparatorMapper.apply(descending ? field.substring(0, field.length() - 1) : field);
        if (descending)
            c = c.reversed();
        sortComparator = (sortComparator == null ? c : sortComparator.thenComparing(c));
    }
    return sortComparator;
}