0

我需要根据时间窗口对元素进行排序,例如

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

到目前为止,我的想法是将打开时间和关闭时间分开排序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

你可以有一个整数的映射,从开放时间映射到关闭时间的整数然后你可以按键或按值排序

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 回答