wuzangji0642 2018-01-03 14:44 采纳率: 0%
浏览 1175
已结题

java list remove add问题

原始数据
图片说明
排序后数据
图片说明
排序规则,如果一条数据的staff_id出现多次,date最大的那条记录的位置不变,将date较小的那条排在下面(对同一个staff_id进行内部排序)
原始数据中,staff_id为1和2的出现了多次,date最大的分别是
1 ada 7 201801和 2 anna 6 201712
因为anna的数据少,先看 anna ,anna的另一条记录,date是201711,小于201712,应该排在后面,所以数据变成了
1 ada 5 201711
3 jack 6 201711
1 ada 6 201712
2 anna 6 201712
2 anna 5 201711
1 ada 7 201801
ada同理,最后变成了第二幅图上的排序结果。
算法如下
List resultListOrder=...

for(Object[] rowOrder:resultListOrder)
{
for(Object[] row:resultListOrder)
{
//staff_id相同的且date较大
if((int)rowOrder[0] ==(int) row[0]&&(int)rowOrder[4]>(int)row[4])
{
Object[] tempRow = row;
//remove date较小记录
resultListOrder.remove(resultListOrder.indexOf(row));
//将date较小记录插入较大记录下一行
resultListOrder.add(resultListOrder.indexOf(rowOrder)+1,tempRow);

        }
  }

}
程序报错 ConcurrentModificationException,是remove造成的。解决方法可以用
Iterator,但是不知道怎么把刚刚那个算法改成Iterator,请问该怎么修改能实现正确的排序

  • 写回答

9条回答

  • JPF1024 2018-01-03 15:05
    关注

    你把remove换成:符合要求的加入到一个新的List里面不就行了吗?

    评论

报告相同问题?

悬赏问题

  • ¥15 gwas 分析-数据质控之过滤稀有突变中出现的问题
  • ¥15 没有注册类 (异常来自 HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))
  • ¥15 知识蒸馏实战博客问题
  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案