Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中嵌套任意对象_Java - Fatal编程技术网

在Java中嵌套任意对象

在Java中嵌套任意对象,java,Java,我在用Java解决一个特定的问题时遇到了困难(我没有通过搜索找到这个问题)。我不知道如何创建一个嵌套的对象列表——最后是一个不同类型的对象/基元类型。例如: *注:仅举一个例子。实际上,我在下面用的不是员工,而是其他人,但这只是一个简单的例子 我有一个对象Employee的数组。它包含有关员工的信息 public class Employee { int age int salary int yearsWorking public Employee () {

我在用Java解决一个特定的问题时遇到了困难(我没有通过搜索找到这个问题)。我不知道如何创建一个嵌套的对象列表——最后是一个不同类型的对象/基元类型。例如:

*注:仅举一个例子。实际上,我在下面用的不是员工,而是其他人,但这只是一个简单的例子

我有一个对象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>());