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

Mos*_*ani 5 java arrays stream java-8 java-stream

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

public static JSONArray arrayToJson(double[] array) throws JSONException{
    JSONArray jsonArray = new JSONArray();

    Arrays.stream(array)
         .forEach(jsonArray::put);  

    return jsonArray;
}
Run Code Online (Sandbox Code Playgroud)

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

koz*_*zmo 10

您的代码有效,但您可以这样写:

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

再举一个例子(创建一个Stringfrom List<String>):

List<String> 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)  
                 ));
Run Code Online (Sandbox Code Playgroud)