2017-10-14 51 views
-1

我想將兩個不同的List對象合併到另一個List中,並且我必須對它們進行排序。 我上課像下面如何將兩個不同的List對象合併到一個List中並對它們進行排序

類員工和一流的工作人員這兩個類實現可比和排序基於時間戳是長期價值

List<Employee> empList=new ArrayList<>(); 
    List<Staff> staffList=new ArrayList<>(); 
    Employee emp1=new Employee(3, "EPPI CF", 1507542925000l); 
    Employee emp2=new Employee(2, "EPPI CF2", 1507542924000l); 
    Employee emp3=new Employee(1, "EPPI CF3", 1507543156000l); 
    empList.add(emp1); 
    empList.add(emp2); 
    empList.add(emp3); 
    Collections.sort(empList); 
    Staff staff1=new Staff(1, "Parnamya", 1507724760000l); 
    Staff staff2=new Staff(2, "Sreenu", 1507623378000l); 
    Staff staff3=new Staff(3, "Joseph", 1507621774000l); 
    Staff staff4=new Staff(4, "Dolores", 1507547700000l); 
    Staff staff5=new Staff(5, "Molly", 1507541100000l); 
    staffList.add(staff1); 
    staffList.add(staff2); 
    staffList.add(staff3); 
    staffList.add(staff4); 
    staffList.add(staff5); 
    Collections.sort(staffList); 
    List<Object> allObj=new ArrayList<>(); 
    allObj.addAll(empList); 
    allObj.addAll(staffList); 

我想排序最後名單是基於時間戳ALLOBJ(長值)在這兩個對象中共同的屬性是時間戳。

我該怎麼做?

預期輸出:

[Staff [id=1, staffName=Parnamya, timestamp=1507724760000], 
Staff [id=2, staffName=Sreenu, timestamp=1507623378000], 
Staff [id=3, staffName=Joseph, timestamp=1507621774000], 
Staff [id=4, staffName=Dolores,timestamp=1507547700000], 
[ 
    Employee [id=1, name=EPPI CF3, timstamp=1507543156000], 
    Employee [id=3, name=EPPI CF, timstamp=1507542925000], 
    Employee [id=2, name=EPPI CF2, timstamp=1507542924000], 
    Staff [id=5, staffName=Molly, timestamp=1507541100000] 
] 
+0

但'員工'和'員工'共享一個共同的接口?如果不是,那麼你會發現很難創建一個可以比較一種類型的比較器。 – Bobulous

+0

嗨,非常感謝你的回覆。我沒有得到你的問題,兩個類都實現了Comparable接口。 – user3355101

+0

@ user3355101是的,但是你能比較一個員工和一個員工嗎? –

回答

4

你需要讓他們延長了相同的超類或實現相同的接口比較。讓他們都擴展類如下應該工作:

public abstract class TimeStamped implements Comparable<TimeStamped>{ 

@Override 
public int compareTo(TimeStamped timedObject) { 
    return Long.compare(this.getTimeStamp(), timedObject.getTimeStamp()); 
} 

public abstract long getTimeStamp(); 

} 
+0

很長時間比較好的電話,不知道存在。通過空檢查,你的意思是if語句來檢查timedObject是否爲空?如果是這種情況,我不確定是否要繼續比較。 – luckydog32

+0

是的,忘記'null',我的錯誤,它應該會拋出'NullPointerException' – Oleg

+0

嗨lickydog32謝謝你的答案。我試着用上面的解決方案得到下面的輸出 [Employee [id = 1,name = EPPI CF3,timstamp = 1507543156000],Employee [id = 3,name = EPPI CF,timstamp = 1507542925000],Employee [id = 2,name = EPPI CF2,timstamp = 1507542924000],Staff [id = 1,staffName = Parnamya,timestamp = 1507724760000],Staff [id = 2,staffName = Sreenu,timestamp = 1507623378000],Staff [id = 3,staffName = Joseph,timestamp = 1507621774000],Staff [id = 4,staffName = Dolores,timestamp = 1507547700000],Staff [id = 5,staffName = Molly,timestamp = 1507541100000]],但在問題 – user3355101

相關問題