如何将List<Map<String, Object>>中指定元素移至索引0?
解决List<Map<String, Object>>指定元素移至索引0的问题
原代码错误原因
原代码执行不符合预期的核心问题:调用unique.remove(i)后,列表中i位置及之后的元素会向前移动一位,此时unique.get(i)获取的已经不是原本要移动的目标元素(而是原i+1位置的元素),导致最终移动了错误的元素。
正确实现方式
场景1:仅移动第一个符合条件的元素
如果列表中只有一个(或只需移动第一个)isCorrect=true的元素,可先定位目标元素,再执行移除+头部添加操作:
List<Map<String, Object>> unique = new ArrayList<>(); Map<String, Object> m1 = new HashMap<>(); m1.put("name", "NUMBER ONE"); m1.put("isCorrect", false); Map<String, Object> m2 = new HashMap<>(); m2.put("name", "MOVE THIS ONE TO i0"); m2.put("isCorrect", true); Map<String, Object> m3 = new HashMap<>(); m3.put("name", "NUMBER TWO"); m3.put("isCorrect", false); unique.add(m1); unique.add(m2); unique.add(m3); System.out.println(unique); // 定位目标元素 Map<String, Object> target = null; for (Map<String, Object> item : unique) { if ((boolean) item.get("isCorrect")) { target = item; break; // 找到第一个符合条件的元素即停止遍历 } } // 执行移动 if (target != null) { unique.remove(target); unique.add(0, target); } System.out.println(unique);
场景2:移动所有符合条件的元素
如果需要将所有isCorrect=true的元素移至头部(保留它们在原列表中的相对顺序),可通过迭代器收集并移除目标元素,再批量添加到头部:
List<Map<String, Object>> unique = new ArrayList<>(); // 初始化元素(同上) unique.add(m1); unique.add(m2); unique.add(m3); System.out.println(unique); List<Map<String, Object>> targets = new ArrayList<>(); Iterator<Map<String, Object>> iter = unique.iterator(); while (iter.hasNext()) { Map<String, Object> item = iter.next(); if ((boolean) item.get("isCorrect")) { targets.add(item); iter.remove(); // 迭代器移除避免并发修改异常 } } // 将目标元素批量添加到列表头部 unique.addAll(0, targets); System.out.println(unique);
内容的提问来源于stack exchange,提问作者newPHPDev
相关产品推荐
相关产品推荐

