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

Java中如何将指定元素从一个ArrayList移至另一个ArrayList?

解决方法:将指定元素从table1迁移到table2

嘿,这个需求在日常开发里挺常见的,我给你分享几种靠谱的实现方式,适配不同的Java版本和场景:

方法一:使用迭代器(安全无并发修改异常)

这是最传统也最安全的方式,能避免直接遍历删除时出现的ConcurrentModificationException:

Iterator<SellableItems> iterator = table1.iterator();
while (iterator.hasNext()) {
    SellableItems item = iterator.next();
    // 匹配条件:名称为beer且价格等于20
    if ("beer".equals(item.getName()) && item.getPrice() == 20) {
        table2.add(item);  // 先加入目标列表
        iterator.remove(); // 从原列表安全移除当前元素
    }
}

为什么用迭代器?因为如果直接用for-each循环或者普通索引循环删除元素,集合的内部结构会在遍历过程中改变,导致迭代器感知到不一致从而抛出异常。迭代器的remove()方法是集合官方认可的安全删除方式,能同步更新迭代器和集合的状态。

方法二:Java 8+ 简洁Stream API方式

如果你的项目用的是Java 8及以上版本,用Stream能写出更简洁易读的代码:

import java.util.stream.Collectors;

// 先筛选出所有符合条件的元素
List<SellableItems> itemsToMove = table1.stream()
    .filter(item -> "beer".equals(item.getName()) && item.getPrice() == 20)
    .collect(Collectors.toList());

// 批量迁移:先添加到table2,再从table1移除
table2.addAll(itemsToMove);
table1.removeAll(itemsToMove);

这种方式的好处是代码逻辑清晰,一眼就能看出要做什么。需要注意的是,如果有多个符合条件的beer元素,都会被批量迁移,和迭代器方式效果一致。

额外场景:只迁移第一个匹配的元素

如果你只需要移动第一个找到的符合条件的元素,可以简化成这样:

迭代器版本

Iterator<SellableItems> iterator = table1.iterator();
while (iterator.hasNext()) {
    SellableItems item = iterator.next();
    if ("beer".equals(item.getName()) && item.getPrice() == 20) {
        table2.add(item);
        iterator.remove();
        break; // 找到第一个后直接退出循环
    }
}

Stream版本

table1.stream()
    .filter(item -> "beer".equals(item.getName()) && item.getPrice() == 20)
    .findFirst()
    .ifPresent(item -> {
        table2.add(item);
        table1.remove(item);
    });

小提醒

确保你的SellableItems类已经正确实现了getName()和getPrice()方法,不然条件判断会失效哦~

内容的提问来源于stack exchange,提问作者Peter Holdensgaard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:57:19