Java 公交线路选项排序的逻辑/算法

Java 公交线路选项排序的逻辑/算法,java,algorithm,Java,Algorithm,我正在尝试实现下面的公交线路排序算法 客户搜索从A到B的公交车并选择首选承运人。(例如:乘坐灰狗从达拉斯到芝加哥) 假设有一个web服务返回从a到B的公交路线选项列表。每个公交选项对象都有一个段列表,其中承运人是属性之一,以及出发时间、到达时间等 我需要按以下顺序对结果进行排序 首先在首选载货公司显示A至B的直达巴士。(每组内按最早到达时间排序) 在首选载体上连接从A到B的总线 从A站连接到中间站的非首选载波的首选载波上的总线 非首选运营商上的直达巴士 从中间站连接非首选载波,然后从中间站连接首

我正在尝试实现下面的公交线路排序算法

客户搜索从A到B的公交车并选择首选承运人。(例如:乘坐灰狗从达拉斯到芝加哥) 假设有一个web服务返回从a到B的公交路线选项列表。每个公交选项对象都有一个段列表,其中承运人是属性之一,以及出发时间、到达时间等

我需要按以下顺序对结果进行排序

  • 首先在首选载货公司显示A至B的直达巴士。(每组内按最早到达时间排序)
  • 在首选载体上连接从A到B的总线
  • 从A站连接到中间站的非首选载波的首选载波上的总线
  • 非首选运营商上的直达巴士
  • 从中间站连接非首选载波,然后从中间站连接首选载波
  • 通过路由连接非首选载波
  • 例如:乘坐灰狗从达拉斯到芝加哥

    ORG         DEST        CARRIER     DEPART  ARRIVAL     
    
    一,。达拉斯芝加哥灰狗上午6点晚上11点

  • 达拉斯芝加哥灰狗上午7点晚上11点45分
  • 达拉斯-堪萨斯灰狗上午6点下午1点

    堪萨斯城-芝加哥灰狗下午2点10点

  • 达拉斯-堪萨斯灰狗上午6点下午1点

    堪萨斯城-芝加哥MEGABUS下午2点10点

  • 达拉斯-芝加哥超级巴士上午6点晚上11点
  • 达拉斯-堪萨斯Megabus上午6点下午1点

    堪萨斯城-芝加哥灰狗下午2点10点

  • 达拉斯-堪萨斯MEGABUS上午6点下午1点

    堪萨斯城-芝加哥MEGABUS下午2点10点 我的想法:

  • 我最初想为每个组使用一个集合,因此使用六个集合对象。 将WS-response映射到包含段列表和isPreferredCarrier标志的BusOption类的自定义响应时, 我想,如果至少有一个载波是非预飞的,则将PreFerredCarrier标志设置为false。 那么

    按要求的1到6的顺序合并所有集合


    这是正确和最佳的方法吗?如果您认为排序逻辑更好,请告知如果至少有一个承运人是非首选承运人,您不能将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 ...
    

    你到底想问什么?我没有看到一个明确的问题,这将阻止很多人回答。
    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 ...