为什么要获取参数类型java.math.BigDecimal、java.math错误消息的运算符-未定义 Collections.sort(雇员,新的比较器(){ 公共整数比较(员工s、员工s1){ int comp=s.getName().compareTo(s1.getName()); 如果(comp!=0){//名称不同 返回补偿; } 返回s.getSalary()-s1.getSalary(); } }); 系统输出打印LN(员工); }

为什么要获取参数类型java.math.BigDecimal、java.math错误消息的运算符-未定义 Collections.sort(雇员,新的比较器(){ 公共整数比较(员工s、员工s1){ int comp=s.getName().compareTo(s1.getName()); 如果(comp!=0){//名称不同 返回补偿; } 返回s.getSalary()-s1.getSalary(); } }); 系统输出打印LN(员工); },java,bigdecimal,Java,Bigdecimal,使用已为您完成所有逻辑的: Collections.sort(employees, new Comparator<Employee>() { public int compare(Employee s, Employee s1) { int comp = s.getName().compareTo(s1.getName()); if (comp != 0) { // names are different ret

使用已为您完成所有逻辑的:

Collections.sort(employees, new Comparator<Employee>() {

    public int compare(Employee s, Employee s1) {
        int comp = s.getName().compareTo(s1.getName());
        if (comp != 0) {    // names are different
            return comp;
        }
        return s.getSalary() - s1.getSalary();
    }
});
System.out.println(employees);

}
-
(减号)运算符仅为原语编号及其专用包装类型定义。

使用该运算符已为您完成所有逻辑:

Collections.sort(employees, new Comparator<Employee>() {

    public int compare(Employee s, Employee s1) {
        int comp = s.getName().compareTo(s1.getName());
        if (comp != 0) {    // names are different
            return comp;
        }
        return s.getSalary() - s1.getSalary();
    }
});
System.out.println(employees);

}

-
(减号)运算符仅为基本数字及其专用包装类型定义。

在Java 8+中定义
比较器的更简单方法是:

return s.getSalary().compareTo(s1.getSalary());

在Java 8+中定义
比较器
的更简单方法:

return s.getSalary().compareTo(s1.getSalary());

正如另一位提到的,这不是处理您所展示的问题的最佳方法,但是,不能对bigdecime使用减号运算符。您需要使用substract方法来避免该错误

Comparator.comparing(Employee::getName).thenComparing(Employee::getSalary)

然后可以使用
.intValue()
将该差异转换为int。请小心,因为它可能会产生副作用,因为从二进制到整数的信息丢失

正如另一位提到的,这不是处理您所展示的问题的最佳方法,但是,不能在BigDecimal上使用减号运算符。您需要使用substract方法来避免该错误

Comparator.comparing(Employee::getName).thenComparing(Employee::getSalary)

然后可以使用
.intValue()
将该差异转换为int。请小心,因为它可能会产生副作用,因为从二进制到整数的信息丢失

Java语言规范()描述了
-
运算符对算术运算的适用性:

在任何情况下,二进制运算符的每个操作数的类型都必须是可转换()为基元数字类型的类型,否则会发生编译时错误。

类型
BigDecimal
既不是原始数字类型(例如
int
short
float
double
),也不能转换为一种类型。相反,尽管
整数
浮点
双精度
短型
也不是基本的数字类型,但是为它们定义了
-
运算符,因为它们可以转换为基本的对应类型()


正如其他答案中已经指出的,用于比较
BigDecimal
实例。

Java语言规范()描述了
-
运算符对算术运算的适用性:

在任何情况下,二进制运算符的每个操作数的类型都必须是可转换()为基元数字类型的类型,否则会发生编译时错误。

类型
BigDecimal
既不是原始数字类型(例如
int
short
float
double
),也不能转换为一种类型。相反,尽管
整数
浮点
双精度
短型
也不是基本的数字类型,但是为它们定义了
-
运算符,因为它们可以转换为基本的对应类型()


正如其他答案中已经指出的,使用来比较
BigDecimal
实例。

您想做什么?请开发您的问题。从Java8开始,您可以将其编写为
employees.sort(Comparator.comparing(Employee::getName)),然后编写为comparating(Employee::getSalary))。你想做什么?请开发您的问题。从Java8开始,您可以将其编写为
employees.sort(Comparator.comparing(Employee::getName)),然后编写为comparating(Employee::getSalary))
BigDecimal.subtract()
将不返回整数,因此不起作用。
BigDecimal.subtract()
将不返回整数,因此不起作用。