今天花了整整一天时间处理从供应商取得的机票查询数据。按照供应商之前的说法,给出来的数据应该是分组了或者排序的说法,然而在接口说明中却无法展示出来,而事实也恰恰是这样——我得花时间出来数据了。

    取得的航班数据乃是长长的List队列,根据价格分类来看是基本有序,看来也就只能从这块入手了。考虑到实现难度问题,我没有选择优秀的排序算法,而是使用java既有的Collections.sort()方法。毕竟只需要创建一个类,简单的实现Comparator接口,并且编写其中的int compare(Object arg0, Object arg1) 方法就可以了。虽然在培训时是有所了解,但这次是第一次运用于实际中。这次的排序还需涉及3个不同的字段:先按照时间,时间相同再按照航班,时间和航班相同就按照价格升序。参考了网上实现的代码,竟然比逾期感觉的来得容易。

实现的方法大概如下:
public int compare(Object arg0, Object arg1) {
  
  Flight f1 = (Flight)arg0;
  Flight f2 = (Flight)arg1;
  
  int flag1=f1.getTime().compareTo(f2.getTime() );//字符串排序
  if(0==flag1){
     int flag2=f1.getFlt().compareTo(f2.getFlt() );
     if(0==flag2){
         return f1.getPrice().compareTo(f2.getPrice() );//BigDecimal类型排序
     }else{
         return flag1;
     }
  }else{
     return flag1;
  }

}

    最麻烦的还是对排序后的数据进行分组。需要满足:同一时间同一航班的不同价格(其实是不同舱位)的归属同一组,组内根据价格升序,并且把最小价格作为该分组的代表。这个分组的设计,就足足花费了一个下午,期间还发现了BUG——目前也不排除是否还有BUG的存在。当然,这也不排除我本人的技术水平不够的问题。

    一天弄些来,可谓是顶心顶肺。算法设计这东西还真麻烦。。。