如何使用Java 8中的流将collection /数组转换为JSONArray
我有一个double数组,我需要使用java流将其转换为JSONArray。我尝试使用forEach(共享可变性),这会导致数据丢失。
public static JSONArray arrayToJson(double[] array) throws JSONException{ JSONArray jsonArray = new JSONArray();
Arrays.stream(array)
.forEach(jsonArray::put);
return jsonArray;
}
有什么办法可以使用流创建JSONArray吗?
回答:
您的代码有效,但是您可以编写如下代码(jdk 8+
):
return Arrays.stream(array) .collect(Collector.of(
JSONArray::new, //init accumulator
JSONArray::put, //processing each element
JSONArray::put //confluence 2 accumulators in parallel execution
));
另外一个示例(String
从创建一个List<String>
)
List<String> list = ...String str = list.stream()
.collect(Collector.of(
StringBuilder::new,
StringBuilder::append,
StringBuilder::append,
StringBuilder::toString //last action of the accumulator (optional)
));
看起来不错,但编译器抱怨:错误:方法引用.collect(Collector.of(JSONArray :: new,JSONArray ::
put,JSONArray :: put)中不兼容的抛出类型JSONException
我检查这个上jdk 13.0.1
和JSON 20190722
并没有发现除了问题Expected 3 arguments, but found
1在.collect(...)
。
( 摇篮 :implementation group: 'org.json', name: 'json', version:
'20190722')
:
public static JSONArray arrayToJson(double[] array) throws JSONException { return Arrays.stream(array).collect(
JSONArray::new,
JSONArray::put,
(ja1, ja2) -> {
for (final Object o : ja2) {
ja1.put(o);
}
}
);
}
:JSONArray::put
合并器不能仅作为方法引用,因为这只会将一个数组放入另一个数组(例如[[]]
),而不是按照所需的行为实际组合它们。
以上是 如何使用Java 8中的流将collection /数组转换为JSONArray 的全部内容, 来源链接: utcz.com/qa/431380.html