按自定义排序列表

时间:2018-01-03 06:36:34

标签: java sorting

实施例: 原始清单 click here to check original data

staff_id staff_name position_id日期   1 Ada 5 201711   2 Anna 5 2017年11月   3杰克6 201711   1 Ada 6 201712   2 Anna 6 2017年12月   1 Ada 7 201801

排序后:click here to check sorted data

staff_id staff_name position_id日期
 3 Jack 6 2017年11月  2 Anna 6 2017年12月  2 Anna 5 2017年11月  1 Ada 7 201801  1 Ada 6 201712  1 Ada 5 201711 这些数据是关于员工的晋升/降级记录。对于员工“杰克”,他的位置没有改变,而阿达晋升3次。 排序规则是:如果staff_id是唯一的(位置没有改变),我们不关心它的顺序。我们需要排序的是有几个记录的员工(staff_id不是唯一的)。日期最大的记录是稳定的根据此记录,相同员工的其他记录应按日期降序排序。例如,Ada促销信息中的最大日期是201801,因此我们不会更改最大日期的订单(相对于其他员工)然后第二大日期是2017年12月,我们把它放在“201801”旁边。

List<Object[]> resultListOrder=...

 for(Object[] rowOrder:resultListOrder)
   {
      for(Object[] row:resultListOrder)
      {
          if((int)rowOrder[0] ==(int) row[0]&&(int)rowOrder[4]>(int)row[4])
            {
               Object[] tempRow = row;
               resultListOrder.remove(resultListOrder.indexOf(row));
               resultListOrder.add(resultListOrder.indexOf(rowOrder)+1,tempRow);

            }
      }
  }

此代码在逻辑上是正确的,但它抛出ConcurrentModificationException.And似乎Iterator在这里不起作用。 然后我用

  resultListOrder.sort((m1, m2) -> {
        if((int)m1[0] ==(int) m2[0]){

             return (int)m1[4]>(int)m2[4] ? -1 : 1;
        }
        else return 0;

    });

但它不起作用,那么如何对列表进行排序?

1 个答案:

答案 0 :(得分:0)

使用简单的for循环重写您的第一次尝试:

for(int i = 0; i < resultListOrder.size(); i++) {
   for(int j = 0; j < resultListOrder.size(); j++) {
      if((int)resultListOrder.get(i)[0] ==(int) resultListOrder.get(j)[0]&&(int)resultListOrder.get(i)[4]>(int)resultListOrder.get(j)[4]) {
           Object[] tempRow = resultListOrder.get(j);
           resultListOrder.remove(j);
           resultListOrder.add(i+1,tempRow);
        }
   }
}

但是,如果你的算法是正确的,我有很强烈的怀疑。

相关问题