我正在尝试实现以下总线路由排序算法。
客户搜索从A到B的公交车并选择首选承运人。 (例如:Greyhound的达拉斯到芝加哥) 假设有一个Web服务返回从A到B的总线路由选项列表。每个BusOption对象都有一个以Carrier作为属性之一的段列表,以及出发时间,到达时间等。
我需要按以下顺序对结果进行排序。
示例例:达拉斯到灰狗的芝加哥
ORG DEST CARRIER DEPART ARRIVAL
1。达拉斯芝加哥灵缇犬上午6点至晚上11点
达拉斯 - 堪萨斯Greyhound上午6点1点
堪萨斯城 - 芝加哥灰狗下午2点10点
达拉斯 - 堪萨斯Greyhound上午6点1点
堪萨斯城 - 芝加哥MEGABUS下午2点10点
达拉斯 - 堪萨斯Megabus早上6点1分
堪萨斯城 - 芝加哥灰狗下午2点10点
达拉斯 - 堪萨斯MEGABUS上午6点1点
堪萨斯城 - 芝加哥MEGABUS下午2点10点 我的想法:
我最初想过为每个组使用一个Set,因此有六个设置对象。 将WS响应映射到包含Segments列表和isPreferredCarrier标志的BusOption类的自定义响应时, 如果至少有一个载波没有预先设置,我想将prefferredCarrier标志设置为false。 然后,
If(routeOption.getSegments.size()==1 and routeOption.isPreferredCarrier()){
Add to Set 1
}else //continue similar logic and add to corresponding Set
按所需顺序合并所有集合1到6。
这是正确和最佳的方法吗?请告知您是否考虑更好的分类逻辑
答案 0 :(得分:0)
如果至少有一个载波不是首选,则不能将isPreferredCarrier标志设置为false,因为在这种情况下你不能设置3.所以,你应该保留每个段的标志:
if (routeOption.getSegments.size()==1 &&
routeOption.getSegments[0].isPreferredCarrier())
Add to Set 1;
else if (routeOption.getSegments.size()==2 &&
routeOption.getSegments[0].isPreferredCarrier() &&
routeOption.getSegments[1].isPreferredCarrier())
Add to Set 2;
else if (routeOption.getSegments.size()==2 &&
routeOption.getSegments[0].isPreferredCarrier())
Add to set 3;
else ...