【问题标题】:Iterating through json elements using java Streams [duplicate]使用java Streams遍历json元素[重复]
【发布时间】: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 节点中没有无限数量的字段 :)
  • 您可以使用takeWhilehasNext 来限制流。
  • 我建议您将标题更改为有关将迭代器与流一起使用的内容,这将使问题更有用。
  • 对不起,我会编辑问题并标记为重复

标签: java java-8 java-stream


【解决方案1】:

你可以使用gson-utils:

Reader in = null;
Iterator<Book> it = GsonUtils.readListLazy(in, Book.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 2019-10-06
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多