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)的作用相同在上面的示例中,代码>位于循环内部
- 第三个参数
是组合器函数,如果流是在parralel中收集的(例如,如果我们有(arrayNode1,arrayNode2)->{arrayNode1.addAll(arrayNode2);return arrayNode1;}
而不是.parralelStream()
)。它的作用是合并两个累加器,这就是为什么函数有两个相同类型的参数。我们定义此函数,以便它将第二个累加器中累积的所有元素添加到第一个累加器中,并返回第一个累加器.stream()
- 第四个参数
为流程定义一个或多个选项。在这种情况下,Collector.Characteristics.IDENTITY\u FINISH
只是说明不会提供任何finisher函数(进一步处理累加器对象),或者换句话说,finisher函数就是IDENTITY函数(未进行处理)IDENTITY\u FINISH
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
));