使用Streams的JsonArray循环

时间:2018-10-29 04:54:13

标签: java gson

我正在尝试使用Java中的Streams循环JsonArray,我已经使用以下代码循环了JsonObject

jsonObject.entrySet().stream()

但是JsonArray没有entrySet()类,我曾尝试使用iterator方法,但它只打印出JsonArray内部的JsonObject之一,这是我的尝试

.map(JsonArray::iterator)
.map(Iterator::next)
.forEach(System.out::println);

编辑:我正在从JsonObject流中获取JsonArray

.map(JsonArray.class::cast)
//need to handle jsonArray

3 个答案:

答案 0 :(得分:0)

这些是将迭代器转换为流的实用程序函数。使用这些功能可以将迭代器转换为流。

public static <T> Stream<T> asStream(Iterator<T> sourceIterator) {
    return asStream(sourceIterator, false);
  }

  public static <T> Stream<T> asStream(Iterator<T> sourceIterator, boolean parallel) {
    Iterable<T> iterable = () -> sourceIterator;
    return StreamSupport.stream(iterable.spliterator(), parallel);
  }

like:

asStream(jsonObject.keys())
   .map(JsonObject::getJSONObject)
   .foreach(//do what you want);

OR

asStream(jsonObject.keys()).forEach();

答案 1 :(得分:0)

使用StreamSupport.stream(jsonArray.spliterator(), false)获得Stream的json数组。

所以您的代码将如下所示:-

StreamSupport.stream(jsonArray.spliterator(), false)
             .forEach(....);

答案 2 :(得分:0)

jsonObject.entrySet().stream()
                .map(entery -> {
                    return StreamSupport.stream(((JsonArray) entery.getValue()).spliterator(), false);
                })
                .forEach(stream->stream.forEach(System.out::println));

使用流支持,您可以将jsonArray映射/转换为流,然后在forEach中获取每个jsonArray的流,然后可以在该forEach中流式传输

相关问题