2015-05-21 83 views
4

我想用傑克遜的Tree Model與Java 8個流API,就像這樣:Jackson是否支持java 8 stream()?

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

然而,JsonNode似乎並沒有實現stream()和我找不到任何標準的助手這樣做。

JsonNode實現可迭代,這樣我就可以實現與谷歌番石榴同樣的結果:關於純Java解決方案

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

但什麼?

+0

你真的不能做一個Java流上的JSON圖可以你,至少如果你做,如果必須限於一個連續的流,即使如此,我不知道這是否有道理。同時你可以讓孩子節點到達父母面前,這很奇怪。也許你正在考慮流式轉換爲POJO的頂級對象列表。這個問題似乎回答了這裏:https://stackoverflow.com/questions/32683785/create-java-8-stream-from-arraynode –

+0

嘿,@ karl-nicholas。我的意思是從一個節點讀取一個序列(它是一個對象或數組)。然而,問題是關於傑克遜樹模型,它與POJO無關。接受的答案正是我所需要的。 對於流圖:JSON文檔是一種非常特殊的圖(樹),並確保它可以遍歷,例如,廣度或深度優先。 – vitaly

+0

當然,一棵樹可以遍歷,但不是流應該是同一個對象?如果我流遍樹遍歷,你會得到每個屬性的不同對象,例如日期,int,浮點數等等?我明白一切都是JsonNode,但這是一個包裝類。如果你不在意節點中有什麼,或者要過濾某些東西,那麼,我想可能會很方便。無論如何,我不知道你在做什麼,所以不用擔心,我只是在考慮一般關於流式樹結構的問題。很高興你有你想要的東西。 –

回答

12

JsonNode implements Iterable,所以它有一個spliterator()。您可以使用

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

得到一個Stream

+0

謝謝!看起來是時候讓我學習Java 8了......一旦冷靜期結束,我會接受答案。 – vitaly