如何在java 8中使用流将集合/数组转换为JSONArray

我有一个双数组,我需要使用java流将数组转换为JSONArray。 我尝试使用forEach(共享可变性),这会导致数据丢失。

public static JSONArray arrayToJson(double[] array) throws JSONException{ JSONArray jsonArray = new JSONArray(); Arrays.stream(array) .forEach(jsonArray::put); return jsonArray; } 

有什么方法可以使用流创建JSONArray吗?

您的代码有效,但您可以编写如下内容:

 return Arrays.stream(array) .collect(Collector.of( JSONArray::new, //init accumulator JSONArray::put, //processing each element JSONArray::put //confluence 2 accumulators in parallel execution ) ); 

再举一个例子(从List创建一个String

 List list = ... String str = this.list .stream() .collect(Collector.of( StringBuilder::new, (b ,s) -> b.append(s), (b1, b2) -> b1.append(b2), StringBuilder::toString //last action of the accumulator (optional) )); 

JSONArray不是线程安全的。 如果使用并行流,则应同步操作。

 Arrays .stream(array) .parallel() .forEach(e -> { synchronized(jsonArray) { jsonArray.put(e); } });