我无法解决Java中的特定问题(我没有通过搜索找到)。我不知道如何创建嵌套的对象列表 - 最后使用不同类型的对象/基元类型。例如:
* 注意:只是一个例子。我实际上是在使用Employee之外的其他内容,但它只是一个简单的例子。
我有一个对象Employee的数组。它包含有关员工的信息。
public class Employee {
int age
int salary
int yearsWorking
public Employee () {
// constructor...
}
// Accessors
}
我需要做的是按分位数/百分位数组织员工。我是通过以下方式完成的:
import org.apache.commons.math.stat.descriptive.rank.Percentile;
public class EmployeeSort {
public void main(String args[]) {
Percentile p = new Percentile();
Employee[] employeeArray = new Employee[100];
// filled employeeArray
double[] ageArray = new double[100];
// filled ageArray with ages from employeeArray
int q = 25; // Percentile cutoff
for (int i = 1; i*q < 100; i++) {
// assign percentile cutoff to some array to contain the values
}
}
}
现在,我遇到的问题是,我需要首先按年龄百分比组织员工,然后按工作年数百分位,最后按工资百分位数组织员工。我现在的Java知识不足以解决这个问题,但我交给的项目是Java。我主要是一个python的家伙,所以这个问题在那种语言中会容易得多。没有这样的运气。
编辑: 所以我注意到我是否需要订购有些困惑,有些人建议使用比较器。我使用Comparator因为百分位数需要有序列表。我遇到的问题是如何将员工的分箱存储到适当的百分位数。为了澄清,我需要将Employee对象按年龄分组到适当的百分位数。然后,在该年龄段内,我需要将所有那些Employee对象包含在Employee.yearsWorking的百分位数内。在此之后,在Employee.age的给定百分位数内的给定百分位数工作区内,我需要创建Employee.salary的百分位数。
答案 0 :(得分:2)
你应该使用ArrayList 取代阵列。
ArrayList<Employee> employeeList= new ArrayList<Employee>();
for (int i = 0, i <= employeeArray.length; i++)
employeeList.add(employeeArray[i]);
现在写下自定义Comparator
public class EmployeeComparatorByAge<Employee>
{
public int compare(Object o1, Object o2)
{
if (o1 != null && o2!= null && o1 instanceof Employee && o2 instanceof Employee )
return ((Employee)o1).age - ((Employee)o2).age;
else
return -1;
}
}
同样,你可以写其他比较。
要立即对它们进行排序,请使用:
Collections.sort(employeeList, new EmployeeComparatorByAge<Employee>());
这将解决您的问题。
答案 1 :(得分:0)
查看java.util.Comparator&lt; T&gt; (在这种情况下,T将是您的员工类型)
您可以创建不同的Comparators并使用Collections.sortList或Arrays.sort(...)(这些方法是伪方法 - 从文档中查找确切的版本)
答案 2 :(得分:0)
使用ArrayList
代替数组来保存您的员工。然后,您可以使用Collections.sort()
对该列表进行排序。 sort()有两个版本,其中一个版本带有Comparator
,允许您按照所需的顺序排序。
答案 3 :(得分:0)
您可能需要阅读此链接以了解Object Ordering in Java
您要做的下一件事是使用ArrayList并在此添加所有员工。然后你想做这样的事情:
ArrayList<Employee> employeeList= new ArrayList<Employee>();
/**
* Add your employee objects to the list
*/
Collections.sort(contacts, new Comparator<Employee>() {
public int compare(Employee emp1, Employee emp2) {
int returnValue;
/**
* Your comparison logic
*/
return returnValue;
}
});
我希望这有帮助!
答案 4 :(得分:0)
如上所述,将Arrays.sort()与不同的Comparator实现一起使用。请记住,此方法(以及Collections.sort())对数据进行操作。因此,如果您需要继续获取数据的不同视图,您可能希望复制数组并以不同的方式对其进行排序,并保留每个视图。
这比不断重新排序数组更有效(以CPU为单位)。