Java中如何将大尺寸org.w3c.dom.NodeList拆分为NodeList组成的列表
NodeList 拆分实现方案
org.w3c.dom.NodeList 是只读接口,本身没有提供批量添加元素的构造方法,拆分时需要先自定义简单的NodeList实现,再做分片处理即可,具体实现如下:
1. 简易可变NodeList实现
原生JDK没有提供可直接构造的NodeList实现类,先自定义一个满足基础接口要求的实现:
import org.w3c.dom.Node; import org.w3c.dom.NodeList; import java.util.List; public class MutableNodeList implements NodeList { private final List<Node> nodes; public MutableNodeList(List<Node> nodes) { this.nodes = nodes; } @Override public Node item(int index) { return index >= 0 && index < nodes.size() ? nodes.get(index) : null; } @Override public int getLength() { return nodes.size(); } }
2. 拆分逻辑实现
按指定批次大小(你的场景填300)拆分,代码如下:
import org.w3c.dom.Node; import org.w3c.dom.NodeList; import java.util.ArrayList; import java.util.List; public class NodeListSplitter { public static List<NodeList> splitNodeList(NodeList original, int batchSize) { List<NodeList> result = new ArrayList<>(); List<Node> tempBatch = new ArrayList<>(); int totalSize = original.getLength(); for (int i = 0; i < totalSize; i++) { tempBatch.add(original.item(i)); // 凑够批次大小或遍历到最后一个元素时生成批次 if (tempBatch.size() == batchSize || i == totalSize - 1) { result.add(new MutableNodeList(new ArrayList<>(tempBatch))); tempBatch.clear(); } } return result; } // 调用示例 public static void main(String[] args) { NodeList bigNodeList = // 你的原始NodeList对象 List<NodeList> splitResult = splitNodeList(bigNodeList, 300); } }
补充:如果业务场景不需要强制返回NodeList类型,也可以省略自定义MutableNodeList的步骤,直接拆分返回
List<List<Node>>使用即可,代码更简洁。
内容的提问来源于stack exchange,提问作者siri
相关产品推荐
相关产品推荐

