gpt4 book ai didi

java - 如何将 org.w3c.dom.NodeList 与 Java 8 Stream API 一起使用?

转载 作者:IT老高 更新时间:2023-10-28 20:37:23 28 4
gpt4 key购买 nike

我相信界面 org.w3c.dom.NodeList缺少一个 stream() 函数来利用 Java 8 的 Stream API 的优势。考虑到引入默认方法以确保向后兼容性,我不明白为什么这个接口(interface)没有 stream() 功能。

所以我的问题是:

  • 如何将 NodeList 与 Stream API 结合使用?
  • 如果不鼓励这样做,原因是什么?

提前致谢!

编辑:我目前正在使用这个实用程序包装器:

private static Stream<Node> nodeStream(NodeList list) {
List<Node> nodes = new ArrayList<>();

for (int n = 0; n < list.getLength(); ++n) {
nodes.add(list.item(n));
}

return nodes.stream();
}

最佳答案

DOM 是一头奇怪的野兽,API 是由 W3C 以独立于语言的方式定义的,然后映射到各种不同的编程语言中,因此 Java 无法在核心 DOM 接口(interface)中添加任何特定于 Java 的内容。首先是 DOM 规范的一部分。

因此,虽然您不能使用 NodeList as 流,但您可以轻松地创建流 from NodeList,例如使用

Stream<Node> nodeStream = IntStream.range(0, nodeList.getLength())
.mapToObj(nodeList::item);

但是,有一个重要的警告 - DOM NodeListlive,它反射(reflect)了自创建列表以来对原始 DOM 树的更改。如果您在 DOM 树中添加或删除元素,它们可能会神奇地从现有的 NodeList 中出现或消失,如果这发生在迭代中间,可能会导致奇怪的效果。如果你想要一个“死”节点列表,你需要将它复制到一个数组或列表中,就像你已经在做的那样。

关于java - 如何将 org.w3c.dom.NodeList 与 Java 8 Stream API 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23360278/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com