【发布时间】:2019-05-08 03:33:37
【问题描述】:
问题:创建一个独立的 jar 可执行文件,它将按姓名、年龄和经验升序打印出现在面试中的候选人列表。
我无法弄清楚 compareTo 方法逻辑以便能够对给定问题中的 3 个字段进行排序。
员工类
package com.example.demo.employee;
public class Employee implements Comparable<Employee> {
private String name;
private int age;
private int exp;
public Employee(String name, int age, int exp) {
super();
this.name = name;
this.age = age;
this.exp = exp;
}
public Employee() {
}
// getter setter
@Override
public int compareTo(Employee emp) {
// I do not think this logic is correct
// I have read the other stack overflow posts with similar problem
// but failing to under stand what to do in this method.
int result = (this.name).compareTo(emp.name);
if ( result == 0 ) {
result = (this.age).compareTo(emp.age);
}
if ( result == 0 ) {
result = (this.exp).compareTo(emp.exp);
}
return result;
}
}
员工服务类
package com.example.demo.employee;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class EmployeeService {
public List<Employee> getEmployees() {
Employee e1 = new Employee("Sandhya", 20, 0);
Employee e2 = new Employee("Kemp", 24, 2);
Employee e3 = new Employee("Anil", 22, 3);
Employee e4 = new Employee("Kumar", 30, 6);
Employee e5 = new Employee("Tim", 32, 7);
public List<Employee> getEmployees() {
List<Employee> eList = new ArrayList<>();
eList.add(e1);
eList.add(e2);
eList.add(e3);
eList.add(e4);
eList.add(e5);
Collections.sort(eList);
return eList;
}
}
员工控制器
package com.example.demo.employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class EmployeeController {
@Autowired
EmployeeService es;
@RequestMapping(value = "/")
public List<Employee> getEmpList(){
List<Employee> list = es.getEmployees();
return list;
}
}
【问题讨论】:
-
为什么你认为逻辑是错误的?您可能想要显示一组输入,以及您期望的结果顺序,以及您的代码会产生什么结果。您的 getEmployees() 方法中的数据似乎只是按名称排序,因为没有一个名称相同。
-
当我为“age”和“exp”编写代码时,我的 IDE 给了我一个错误,我得到的错误是“无法解析方法 compareTo(int)”。预期的输出是按姓名、年龄和经验升序排列的面试候选人列表
-
你用的是什么版本的java?从 Java 7 开始,Integer 有一个 compareTo 方法,并且在此之前将 int 自动装箱为 Integer。也许尝试
age.compareTo(emp.age)没有不必要的(this.age) -
项目版本为java版本11.0.2。我将其更改为“result = age.compareTo(emp.age);”我仍然遇到同样的错误“无法解析 compareTo(int)
-
是的,我可以看到...好的,下面有新答案
标签: java list sorting comparable