[英]Nesting arbitrary objects in 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的百分位數。
您應該使用ArrayList代替Arrays。
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>());
這將解決您的問題。
查看java.util.Comparator <T>(在這種情況下,T將是您的Employee類型)
您可以創建不同的Comparators並使用Collections.sortList或Arrays.sort(...)(這些方法是偽方法 - 從文檔中查找確切的版本)
而不是數組使用ArrayList
來保存您的Employees。 然后,您可以使用Collections.sort()
對該列表進行排序。 sort()有兩個版本,其中一個版本帶有一個Comparator
,允許您按照所需的順序排序。
您可能希望閱讀此鏈接以了解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;
}
});
我希望這有幫助!
如上所述,將Arrays.sort()與不同的Comparator實現一起使用。 請記住,此方法(以及Collections.sort())對數據進行操作。 因此,如果您需要不斷獲取數據的不同視圖,您可能希望復制數組並以不同的方式對其進行排序,並保持每個視圖。
這比不斷重新排序數組更有效(以CPU為單位)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.