Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向Json ObjectNode添加列表_Java_Json - Fatal编程技术网

Java 向Json ObjectNode添加列表

Java 向Json ObjectNode添加列表,java,json,Java,Json,现在我有一份清单 ObjectNode row = Json.newObject(); row.put("0", a); row.put("1", x); row.put("2", y); List List=new ArrayList(); 如何将其添加到行中?您可以使用putArray方法创建ArrayNode。然后,您应该用列表中的元素填充它 List<String> list = new ArrayList<String>(); 下面是一种创建arrayNo

现在我有一份清单

ObjectNode row = Json.newObject();
row.put("0", a);
row.put("1", x);
row.put("2", y);
List List=new ArrayList();

如何将其添加到行中?

您可以使用
putArray
方法创建
ArrayNode
。然后,您应该用列表中的元素填充它

List<String> list = new ArrayList<String>();

下面是一种创建arrayNode并从流中填充其元素的功能性方法。它与上面的答案相同:

本质上,它定义了一个自定义收集器来累积流提供的元素。一些解释:

  • 第一个参数
    ()->row.putArray(“myList”)
    定义了一个函数,该函数将提供对象来累加项目(称为供应商函数)。在本例中,此函数将提供
    ArrayNode
    ,相当于
    ArrayNode ArrayNode=row.putArray(“myList”)语句
  • 第二个参数
    (arrayNode,item)->arrayNode.add(item)
    定义了累加器函数,其作用是添加元素。在
    ->
    运算符的左侧,第一个变量(例如
    arrayNode
    )指的是第一个参数中定义的容器,而第二个变量(例如
    )指的是流提供的要累加的元素。此函数的作用与语句
    arrayNode.add(item)的作用相同位于循环内部
  • 第三个参数
    (arrayNode1,arrayNode2)->{arrayNode1.addAll(arrayNode2);return arrayNode1;}
    是组合器函数,如果流是在parralel中收集的(例如,如果我们有
    .parralelStream()
    而不是
    .stream()
    )。它的作用是合并两个累加器,这就是为什么函数有两个相同类型的参数。我们定义此函数,以便它将第二个累加器中累积的所有元素添加到第一个累加器中,并返回第一个累加器
  • 第四个参数
    Collector.Characteristics.IDENTITY\u FINISH
    为流程定义一个或多个选项。在这种情况下,
    IDENTITY\u FINISH
    只是说明不会提供任何finisher函数(进一步处理累加器对象),或者换句话说,finisher函数就是IDENTITY函数(未进行处理)
这个解决方案一开始看起来可能更复杂,但它利用了函数编程的所有功能。例如,在收集所有内容之前,我们可以流式处理对象,使用
map
函数提取字符串属性,
filter
it等:

    yourStringList.stream()
        .collect(Collector.of(
            () -> row.putArray("myList"), 
            (arrayNode, item) -> arrayNode.add(item), 
            (arrayNode1, arrayNode2) -> { arrayNode1.addAll(arrayNode2);  return arrayNode1; },
            Collector.Characteristics.IDENTITY_FINISH
        ));

什么是x和y..它们是int,string etcaddAll需要一个ArrayNode或一列JSONObject,您需要遍历列表,将其字符串添加到新的ArrayNode。@EricMaziade,您是对的。我错误地发现,
addAll
接受一个。但是,只有
JsonNode
s的集合。我会更新我的答案-谢谢!
    yourStringList.stream()
        .collect(Collector.of(
            () -> row.putArray("myList"), 
            (arrayNode, item) -> arrayNode.add(item), 
            (arrayNode1, arrayNode2) -> { arrayNode1.addAll(arrayNode2);  return arrayNode1; },
            Collector.Characteristics.IDENTITY_FINISH
        ));
    yourObjectList.stream()
        .map(o -> o.getTheStringProperty())
        .filter(o -> o.length() > MIN_SIZE)
        .collect(Collector.of(
            () -> row.putArray("myList"), 
            (arrayNode, item) -> arrayNode.add(item), 
            (arrayNode1, arrayNode2) -> { arrayNode1.addAll(arrayNode2);  return arrayNode1; },
            Collector.Characteristics.IDENTITY_FINISH
        ));