如何使用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.1JSON 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

回到顶部