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

如何将二维ArrayList转为一维ArrayList及解决XML数据覆盖问题

嘿,我来帮你搞定这个二维ArrayList转一维的问题,顺便也给你提个小建议解决XML覆盖的坑😉

解决二维ArrayList转一维的问题

首先,假设你的二维ArrayList是ArrayList<ArrayList<YourDataType>> twoDList,一维列表是ArrayList<YourDataType> oneDList。核心思路就是遍历二维里的每一个子列表,把它们的元素全部“搬”到一维列表里。这里有几种实用的方法:

方法1:普通循环遍历(直观好理解)

这是最直接的方式,逐个遍历二维列表中的每个子ArrayList,再用addAll()把整个子列表的元素一次性添加到一维列表里——比逐个add()元素高效多了:

// 替换成你实际的类型,比如String或者自定义的Position类
for (ArrayList<YourDataType> subList : twoDList) {
    oneDList.addAll(subList);
}

如果担心二维列表里有null的子列表,记得加个非空判断避免空指针:

for (ArrayList<YourDataType> subList : twoDList) {
    if (subList != null) {
        oneDList.addAll(subList);
    }
}

方法2:Java 8+ 流操作(简洁优雅)

如果你用的是Java 8及以上版本,用流来扁平化二维列表会更简洁,一行代码就能搞定:

// 直接生成新的一维列表
oneDList = twoDList.stream()
                   .flatMap(List::stream)
                   .collect(Collectors.toCollection(ArrayList::new));

要是你想把元素加到已有的一维列表里,也可以这么写:

twoDList.stream()
        .flatMap(List::stream)
        .forEach(oneDList::add);
顺便提下XML覆盖的优化建议

既然你提到重新打开程序时XML会被覆盖,其实除了先合并ArrayList再写入,还有个更直接的思路:不要直接覆盖整个XML文件,而是先读取原有XML的内容,把新的<savedPosition>节点追加到对应的父节点下,再把整个文档写回文件。这样就不用先把所有历史数据转成ArrayList再合并,能减少中间步骤。比如用DOM解析器,找到存储<savedPosition>的父节点,把新节点append进去,再序列化整个文档到文件,就能完美避免覆盖原有数据啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:27:03