2013-08-05 55 views
-2

我有四個不同對象類型的列表。每個對象類型共享一個公共元素:getTime()。通用公共元素對多個對象排序

注:

  1. 列表是爲了,但在同一點可能無法啓動。
  2. 列表可能不會在同一時間點開始。

什麼是我訂購這4個對象的最佳方式,使每個元素「i」對於getTime()具有相同的值?

+1

最好的方法是什麼?所以你已經實現了我猜測一個Collections.sort與比較getTime? – arynaq

+1

你的問題不清楚。給定兩個具有時間值的列表:a = [1,3,5]和b = [2,3,4],結果如何?我的猜測是:a'= [1,null,3,null,5]和b'= [null,2,3,4,null]。它是否正確? –

回答

0

如果同一元素getTime()你的意思是交叉引用,以匹配具有相同時間元素列表...

我會創建一個包裝類有2種方法,getTime()getValue()

public class TimeElement{ 
    final long time; 
    final Object value; 
    TimeElement(long time, Object value){ 
     this.time = time; 
     this.value = value; 
    }  
    public long getTime(){return time;} 
    public Object getValue(){return value;} 
} 

然後,通過添加每個列表的內容來創建一個大的列表。

List<TimeElement> list = new ArrayList<TimeElement>(); 
for(int i=0;i<list1.size();i++){ 
    list.add(new TimeElement(list1.get(i).getTime(), list1.get(i)); 
} 

然後,對這個組合列表進行排序。迭代它,你將能夠輕鬆獲得具有相同時間價值的元素。

-1

不管您想要,您都可以按時間排序第一個列表。然後,對於其他三個列表,您可以簡單地迭代第一個列表,並在同一時間在其他列表中查找對象。

for (Object1 o : list1) { 
    for(Object2 o2 : list2) { 
     if ((o2.getTime()).equals(o.getTime())) { 
      newList2.add(o2); 
      break; 
     } 
    } 
    for(Object3 o3 : list3) { 
     if ((o3.getTime()).equals(o.getTime())) { 
      newList3.add(o3); 
      break; 
     } 
    } 
    for(Object4 o4 : list4) { 
     if ((o4.getTime()).equals(o.getTime())) { 
      newList2.add(o4); 
      break; 
     } 
    } 
}