2013-09-26 57 views
0

我需要基於時間窗對元素進行排序,例如,基於時間窗對元素進行排序

8:00 - 9:00 
8:00 - 11:00 
9:00 - 10.00 
9:00 - 12:00 

到目前爲止,我的想法是開放時間和關閉時間爲單獨Maps排序,然後嘗試創建最終的ListsortedList。但我不確定這個想法是否是最有效的解決方案。有沒有辦法以更簡單的方式解決這個問題?

private List<Customer> sortCustomersByTimeWindows(List<Customer> _C) 
{ 
List<Customer> sortedList = new ArrayList<Customer>();  

Map<Integer,Integer> openTimes = new HashMap<Integer,Integer>(); 
Map<Integer,Integer> closeTimes = new HashMap<Integer,Integer>(); 

for (int i=0; i<_C.size(); i++) 
{ 
    openTimes.put(i,_C.get(i).getOpenTime()); 
    closeTimes.put(i,_C.get(i).getCloseTime()); 
} 

List<Integer> openTimes_values = new ArrayList<Integer>(openTimes.values()); 
List<Integer> closeTimes_values = new ArrayList<Integer>(closeTimes.values()); 

Collections.sort(openTimes_values, new Comparator<Integer>() { 
    public int compare(Integer o1, Integer o2) { 
     return o1 - o2; 
    } 
}); 

Collections.sort(closeTimes_values, new Comparator<Integer>() { 
    public int compare(Integer o1, Integer o2) { 
     return o1 - o2; 
    } 
}); 

for (int i=0; i<_C.size(); i++) 
{ 
    //... 
} 

return sortedList; 
} 

回答

3

只需使用一個自定義的比較器進行排序您的客戶根據時間:

Collections.sort(_C, new Comparator<Customer>() { 
    @Override 
    public int compare(Customer c1, Customer c2) { 
     int openTimeDiff = c1.getOpenTime() - c2.getOpenTime(); 
     if (openTimeDiff != 0) 
      return openTimeDiff; 
     return c1.getCloseTime() - c2.getCloseTime(); 
    } 
}); 
1

你可以有地圖整型,整型,從開盤時間到關閉時間 映射,那麼你可以通過按鍵或值進行排序

Collections.sort(_C, new Comparator<Customer>() { 
    public int compare(Customer o1, Customer o2) { 
     return //the test case here for times or whatever you need 
    } 
}); 
+0

你的意思是? Map times = new HashMap (); ... times.put(_C.get(i).getOpenTime(),_ C.get(i).getCloseTime());在這種情況下,如何按開放和關閉時間進行排序? –

+0

Aslo,我需要跟蹤'我',因爲它與客戶的id –

+0

連接你可以通過鍵集或值集合獲得迭代器 – shieldgenerator7

相關問題