【发布时间】:2021-10-28 09:01:54
【问题描述】:
我正在尝试遍历 JsonNode 中的元素并检查它们是否符合某些条件。我想使用 Streams 而不是使用经典迭代器。我有类似这样的代码:
return Stream.generate(jsonNode.fields()::next)
.allMatch(entry -> {
switch (entry.getKey()) {
case "a":
return evaluateA(entry.getValue());
case "b":
return evaluateB(entry.getValue());
default:
return false;
}
});
但是当我运行它时,我得到一个 java.util.NoSuchElementException。我猜switch case中的return语句导致了这个错误。如果是这种情况,我该如何处理?
【问题讨论】:
-
这与你的
switch无关。Stream.generate(jsonNode.fields()::next)创建一个 infinite 流。您的代码中没有检查hasNext。也许你正在寻找How to create a Java 8 Stream from an iterator? -
Stream.generate生成无限流。当然,您的 JSON 节点中没有无限数量的字段 :) -
您可以使用
takeWhile和hasNext来限制流。 -
我建议您将标题更改为有关将迭代器与流一起使用的内容,这将使问题更有用。
-
对不起,我会编辑问题并标记为重复
标签: java java-8 java-stream