You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:33:14