在Java中嵌套任意对象

时间:2012-07-05 15:07:12

标签: java

我无法解决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的百分位数。

5 个答案:

答案 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为单位)。