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 Arrays.sort使用Lambda,然后比较_Java_Sorting_Lambda_Comparator - Fatal编程技术网

Java Arrays.sort使用Lambda,然后比较

Java Arrays.sort使用Lambda,然后比较,java,sorting,lambda,comparator,Java,Sorting,Lambda,Comparator,我是Java新手,我正在尝试使用Lambda表达式和比较器。 我有一个具有其他getter和toString方法的公共类人员: public class Person { private String name; private int age; private int computers; private double salary; public Person(String name, int age, int computers, double sala

我是Java新手,我正在尝试使用Lambda表达式和比较器。 我有一个具有其他getter和toString方法的公共类人员:

public class Person { 
    private String name;
    private int age;
    private int computers;
    private double salary;

public Person(String name, int age, int computers, double salary){
    this.name = name;
    this.age = age;
    this.computers = computers;
    this.salary = salary;
    }

public String getName(){
    return this.name;
}

public int getAge(){
    return this.age;
}

public int getComputers(){
    return this.computers;
}

public double getSalary(){
    return this.salary;
}
@Override
public String toString(){
    return "Name: " + getName() + ", age: "+ getAge() +
            ", N° pc: " + getComputers() + ", salary: " + getSalary();
}


}
现在我想对Person[]列表进行排序,首先按字符串(降序),然后按年龄(升序),然后按计算机数量(降序),最后按工资(升序)进行比较。我无法实现Comparable,因为如果我重写compareTo方法,它应该是升序或降序的,我需要两者。我想知道在不创建自己的比较器类的情况下是否有可能做到这一点。基本上我的代码几乎是正确的,但我不知道如何反转ThenComparingit(Person::getComputers)

正确的输出应为:

Name: Mark,  age: 58, N° pc: 2, salary: 2400.0
Name: Flora, age: 18, N° pc: 1, salary:  800.0
Name: Flora, age: 24, N° pc: 5, salary: 1100.0
Name: Flora, age: 43, N° pc: 2, salary:  789.0
Name: Erik,  age: 25, N° pc: 3, salary: 2000.0
Name: Erik,  age: 25, N° pc: 1, salary: 1300.0
Name: Adam,  age: 30, N° pc: 6, salary: 1500.0
Name: Adam,  age: 30, N° pc: 6, salary: 1800.0

提前谢谢大家

我认为您只需要分别创建计算机
比较器

Comparator.comparing(Person::getName).reversed()
          .thenComparingInt(Person::getAge)
          .thenComparing(Comparator.comparingInt(Person::getComputers).reversed())
          .thenComparingDouble(Person::getSalary)

我认为您只需要分别创建计算机
比较器

Comparator.comparing(Person::getName).reversed()
          .thenComparingInt(Person::getAge)
          .thenComparing(Comparator.comparingInt(Person::getComputers).reversed())
          .thenComparingDouble(Person::getSalary)

为什么没有在Person类中定义
getters
?为什么没有在Person类中定义
getters