2017-10-14 15 views
-1

2つの異なるリストオブジェクトを別のリストにマージしたいので、ソートする必要があります。 私は両方のクラスは、long値iのタイムスタンプに基づいてALLOBJで最終的なリストをソートしたい2つの異なるリストオブジェクトを1つのリストにマージしてソートする方法

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); 

(長くしているタイムスタンプに基づいて匹敵するとソートを実装するクラスの従業員とクラススタッフ

下のようなクラスを持っています値)両方のオブジェクトの共通プロパティはタイムスタンプです。

どうすればいいですか?

予想される出力:

[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

あなたは彼らが同じスーパークラスを拡張したり、比較するために同じインタフェースを実装しておく必要があります。 `Employee`と` Staff`は共通のインターフェースを共有していますか?次のようにクラスを拡張すると、次のようなクラスが拡張されます:

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

長い間オハイオ州の素晴らしいコールは、それが存在していたかわからなかった。 nullチェックで、timedObjectがnullでないことを確認するif文を意味しますか?そのような場合は、比較を続行したいかどうかわかりません。 – luckydog32

+0

ええ、忘れてしまいました。「間違っています。私の間違いは、NullPointerExceptionを投げます。 – Oleg

+0

こんにちは。私は上記の解決策を以下の出力を得ようとしました。 [Employee [id = 1、name = EPPI CF3、timstamp = 1507543156000]、Employee [ID = 3、name = EPPI CF、timstamp = 1507542925000]、Employee [id = 2、name = [ID = 1、staffName = Parnamya、timestamp = 1507724760000]、Staff [ID = 2、staffName = Sreenu、timestamp = 1507623378000]、Staff [ID = 3、staffName =タイムスタンプ=タイムスタンプ= 1507542924000] [ID = 4、staffName = Dolores、タイムスタンプ= 1507547700000]、Staff [ID = 5、staffName = Molly、timestamp = 1507541100000]]の質問に更新されます。 – user3355101

関連する問題