在Java中嵌套任意对象
我在用Java解决一个特定的问题时遇到了困难(我没有通过搜索找到这个问题)。我不知道如何创建一个嵌套的对象列表——最后是一个不同类型的对象/基元类型。例如: *注:仅举一个例子。实际上,我在下面用的不是员工,而是其他人,但这只是一个简单的例子 我有一个对象Employee的数组。它包含有关员工的信息在Java中嵌套任意对象,java,Java,我在用Java解决一个特定的问题时遇到了困难(我没有通过搜索找到这个问题)。我不知道如何创建一个嵌套的对象列表——最后是一个不同类型的对象/基元类型。例如: *注:仅举一个例子。实际上,我在下面用的不是员工,而是其他人,但这只是一个简单的例子 我有一个对象Employee的数组。它包含有关员工的信息 public class Employee { int age int salary int yearsWorking public 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
}
}
}
import org.apache.commons.math.stat.description.rank.Percentile;
公共类EmployeeSort{
公共void main(字符串参数[]){
百分位p=新的百分位();
员工[]employeeArray=新员工[100];
//填充的employeeArray
double[]ageArray=新的double[100];
//用employeeArray中的年龄填充ageArray
int q=25;//百分位数截止值
对于(int i=1;i*q<100;i++){
//将百分位数截止值指定给某个数组以包含值
}
}
}
现在,我面临的问题是,我需要先按年龄的百分位,然后按年薪的百分位,最后按工资的百分位来组织员工。我的Java知识目前还不足以解决这个问题,但交给我的项目是Java。我主要是一个python人,所以用那种语言解决这个问题会容易得多。没有这样的运气
编辑:
所以我注意到一些关于是否需要排序的混淆,一些人建议使用Comparator。我使用Comparator是因为百分位数需要一个有序列表。我面临的问题是如何将员工的分类存储到其相应的百分比中。为了澄清这一点,我需要将Employee对象按年龄组合成相应的百分比。然后,在这个年龄范围内,我需要将所有这些员工对象都放在Employee.yearsWorking的百分位数内。接下来,在yearsWorking的给定百分位数范围内,即Employee.age的给定百分位数范围内,我需要创建Employee.salary的百分位数范围。查看java.util.Comparator(本例中的T将是您的员工类型)
您可以创建不同的比较器并使用Collections.sortList或Arrays.sort(…)(这些方法是伪方法-从文档中查找确切版本)而不是数组使用
ArrayList
来容纳员工。然后可以使用Collections.sort()
对该列表进行排序。sort()有两个版本,其中一个版本使用比较器
,允许您按照所需的顺序进行排序。您可能需要阅读此链接才能理解
接下来要做的事情是使用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;
}
});
ArrayList employeeList=new ArrayList();
/**
*将员工对象添加到列表中
*/
Collections.sort(contacts,newcomparator(){
公共整数比较(员工emp1、员工emp2){
返回值;
/**
*你的比较逻辑
*/
返回值;
}
});
我希望这有帮助 您应该使用
代替数组
ArrayList<Employee> employeeList= new ArrayList<Employee>();
for (int i = 0, i <= employeeArray.length; i++)
employeeList.add(employeeArray[i]);
ArrayList employeeList=new ArrayList();
对于(int i=0,i使用Arrays.sort()和上面提到的不同比较器实现。请记住,此方法(以及Collections.sort())对就地数据进行操作。因此,如果需要不断获取数据的不同视图,可能需要复制数组并以不同的方式对其排序,并保留每个视图
这将更有效率(CPU方面)而不是不断地对数组重新排序。当你说“组织”时,你的意思是对它们进行排序吗?你能详细说明一下你想如何组织它们吗?所以你需要的是一个容器,它将包含其他容器或项目列表?换句话说,一个树状结构?你也可以使用数组和java.util.Arrays来实现这一点
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>());