0

時間枠に基づいて要素を並べ替える必要があります。

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

これまでのところ、私の考えは、open 時間と close 時間を別々にソートしてMapsから、最終的な を作成しようとすることList sortedListです。ただし、このアイデアが最も効率的なソリューションであるかどうかはわかりません。この問題を簡単に解決する方法はありますか?

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;
}
4

2 に答える 2

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();
    }
});
于 2013-09-26T13:50:58.097 に答える
1

開店時間から閉店時間までマップする Integer, Integer のマップを持つことができます。次に、キーまたは値で並べ替えることができます。

Collections.sort(_C, new Comparator<Customer>() {
    public int compare(Customer o1, Customer o2) {
        return //the test case here for times or whatever you need
    }
});
于 2013-09-26T13:41:36.203 に答える