Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.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 使用comparable对字符串属性进行排序_Java_Collections_Comparable - Fatal编程技术网

Java 使用comparable对字符串属性进行排序

Java 使用comparable对字符串属性进行排序,java,collections,comparable,Java,Collections,Comparable,我有一个employee类和一个client类。我可以通过员工id和年龄使用compareTo()进行排序,因为它们是整数类型。但我该如何按员工姓名或工资排序? compareTo不接受int以外的任何数据类型,引发编译时异常 public class Employee implements Comparable<Employee> { private int id; private String name; private int age; pri

我有一个employee类和一个client类。我可以通过员工id和年龄使用compareTo()进行排序,因为它们是整数类型。但我该如何按员工姓名或工资排序? compareTo不接受int以外的任何数据类型,引发编译时异常

public class Employee implements Comparable<Employee> {

    private int id;
    private String name;
    private int age;
    private long salary;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public long getSalary() {
        return salary;
    }

    public Employee(int id, String name, int age, int salary) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    @Override
    public int compareTo(Employee emp) {
        //let's sort the employee based on id in ascending order
        //returns a negative integer, zero, or a positive integer as this employee id
        //is less than, equal to, or greater than the specified object.
        return (this.age - emp.age);
    }

    @Override
    //this is required to print the user friendly information about the Employee
    public String toString() {
        return "[id=" + this.id + ", name=" + this.name + ", age=" + this.age + ", salary=" +
                this.salary + "]";
    }

}
我只是在谷歌上搜索了一下,似乎我也可以通过实现comparator来实现它

public static Comparator<Employee> SalaryComparator = new Comparator<Employee>() {

        @Override
        public int compare(Employee e1, Employee e2) {
            return (int) (e1.getSalary() - e2.getSalary());
        }
    };

我将通过以下方式实现compareTo:

public int compareTo(Employee emp) {
    return Integer.compare(this.age, emp.age);
}

我将通过以下方式实现compareTo:

public int compareTo(Employee emp) {
    return Integer.compare(this.age, emp.age);
}

如果要根据名称进行排序,可以尝试

@Override
    public int compareTo(Employee emp) {
        return this.name.compareTO(emp.name);
    }

如果要根据名称进行排序,可以尝试

@Override
    public int compareTo(Employee emp) {
        return this.name.compareTO(emp.name);
    }

基本上,您希望根据几个属性对类进行排序。这里的诀窍是决定评估它们的顺序,并将一个单独视为
可比的
。如果比较不是
0
-您找到了哪个实例应该在另一个实例之前,您可以只返回值。如果没有,则需要评估其他属性

例如,假设您要使用的属性是
id
age
name
salary

@Override
public int compareTo(Employee emp) {
    // compare IDs:
    int cmp = Integer.compare(id, emp.id);
    if (cmp != 0) {
        return cmp;
    }

    // compare ages:
    cmp = Integer.compare(age, emp.age);
    if (cmp != 0) {
        return cmp;
    }

    // compare names. Luckily, Strings are comparable:
    cmp = name.compareTo(emp.name);
    if (cmp != 0) {
        return cmp;
    }

    // compare salaries, using the builtin Long.compare:
    return Long.compare (salary, emp.salary);
}

基本上,您希望根据几个属性对类进行排序。这里的诀窍是决定评估它们的顺序,并将一个单独视为
可比的
。如果比较不是
0
-您找到了哪个实例应该在另一个实例之前,您可以只返回值。如果没有,则需要评估其他属性

例如,假设您要使用的属性是
id
age
name
salary

@Override
public int compareTo(Employee emp) {
    // compare IDs:
    int cmp = Integer.compare(id, emp.id);
    if (cmp != 0) {
        return cmp;
    }

    // compare ages:
    cmp = Integer.compare(age, emp.age);
    if (cmp != 0) {
        return cmp;
    }

    // compare names. Luckily, Strings are comparable:
    cmp = name.compareTo(emp.name);
    if (cmp != 0) {
        return cmp;
    }

    // compare salaries, using the builtin Long.compare:
    return Long.compare (salary, emp.salary);
}

compareTo
希望您根据
Comparable
的文档返回一个描述三元比较结果的整数(小于、等于或大于),别混淆了。我知道我想知道如何通过名称进行比较?因为您的名称是
字符串
字符串
也实现了
可比性
,只需重复使用它:
返回这个.name.compareTo(emp.name)使用索引按名称获取字段并在比较器模型中使用。
compareTo
希望您根据
Comparable
的文档返回描述三元比较结果的整数(小于、等于或大于),别混淆了。我知道我想知道如何通过名称进行比较?因为您的名称是
字符串
字符串
也实现了
可比性
,只需重复使用它:
返回这个.name.compareTo(emp.name)使用索引按名称获取字段,并在比较器模型中使用它。如果使用的是诸如
int
之类的基本类型,则此操作将不起作用。Age被声明为
int
。如果您使用的是
int
之类的基元类型,这将不起作用。年龄被声明为
int