我有一个Employee
实现Comparable
接口的类。
现在我Employee
的列表中有 5 个对象,每个对象都有自己的salary
属性。我想找到所有Employee
具有最高薪水的对象。
我可以使用
Employee employee = Collections.max(employeeList);
但这仅返回一个Employee
,而我正在尝试检索具有相同最大值的所有对象的数组或列表。我怎样才能做到这一点?
我有一个Employee
实现Comparable
接口的类。
现在我Employee
的列表中有 5 个对象,每个对象都有自己的salary
属性。我想找到所有Employee
具有最高薪水的对象。
我可以使用
Employee employee = Collections.max(employeeList);
但这仅返回一个Employee
,而我正在尝试检索具有相同最大值的所有对象的数组或列表。我怎样才能做到这一点?
为了提高效率,您应该遍历列表并自己查找所有最大元素:
List<Employee> result = new ArrayList<>();
Employee currentMax = null;
for (Employee e : list) {
if (currentMax == null || e.compareTo(currentMax) > 0) {
currentMax = e;
result.clear();
result.add(e);
}
else if (currentMax!= null && e.compareTo(currentMax) == 0) {
result.add(e);
}
}
这个解决方案是 O(n),并且需要单次遍历列表。
尝试这个:
Collections.sort(list);
Collections.reverse(list);
Set<Employee> highest = new HashSet<Employee>();
Employee max = list.get(0);
for (Employee employee : list) {
if (e.compareTo(max) < 0) break;
highest.add(employee);
}
我选择了一个集合,因为不应该有重复。
Employee max=Collections.max(employeeList);
List <Employee> maxEmployeeList=new ArrayList<Employee>();
maxEmployeeList.add(max);
for(Employee e:employeeList){
if(e.equals(max)){
maxEmployeeList.add(e);
}
}