【问题标题】:Does Jackson support java 8 stream()?Jackson 是否支持 java 8 流()?
【发布时间】:2015-05-21 21:57:43
【问题描述】:

我想将 Jackson 的 Tree Model 与 Java 8 流 API 一起使用,如下所示:

JsonNode jn = new ObjectMapper().readValue(src, JsonNode.class);
return jn.stream().anyMatch(myPredicate);

但是,JsonNode 似乎没有实现stream(),而且我找不到任何标准的助手来实现。

JsonNode 实现了 Iterable,所以我可以使用 Google Guava 实现相同的结果:

JsonNode jn = new ObjectMapper().readValue(src, JsonNode.class);
return Iterables.find(jn, myPredicate);

但是纯 Java 解决方案呢?

【问题讨论】:

  • 你不能真的在 JSON 图上做 java 流,至少如果你这样做的话,如果必须限制为顺序流,即使那样我也不确定它是否会很有意义。同时,您可以让子节点在其父节点之前到达,这有点奇怪。也许您正在考虑流式传输转换为 POJO 的顶级对象列表。这个问题似乎在这里得到了回答:stackoverflow.com/questions/32683785/…
  • 嘿,@karl-nicholas。我的意思是从节点读取序列(无论是对象还是数组)。但是,问题是关于与 POJO 无关的杰克逊树模型。接受的答案正是我所需要的。至于流式传输图形:JSON 文档是一种非常特殊的图形(树),并确保它可以被遍历,例如广度或深度优先。
  • 当然,可以遍历树,但流不应该是同一个对象吗?如果我流式遍历树,您会为每个属性获得不同的对象,例如日期、整数、浮点数等?我知道一切都是 JsonNode 但那是一个包装类。如果您不关心节点中的内容,或者要过滤某些内容,是的,我想可能会很方便。无论如何,我不知道您要做什么,所以不用担心,我只是在考虑一般流式树结构的问题。很高兴你得到了你想要的东西。

标签: json jackson java-8 guava java-stream


【解决方案1】:

JsonNode 实现了Iterable,所以它有一个spliterator()。你可以使用

StreamSupport.stream(jn.spliterator(), false /* or whatever */);

获取Stream

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 2015-12-18
    • 2017-03-25
    • 2014-11-27
    • 2021-03-09
    • 2012-11-15
    • 2020-03-26
    相关资源
    最近更新 更多