根据时间窗口对元素进行排序

时间:2013-09-26 13:36:00

标签: java sorting collections

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

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

2 个答案:

答案 0 :(得分: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 :(得分: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
    }
});
相关问题