簡體   English   中英

在Java中嵌套任意對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM