Java 8: How to write lambda stream to work with JsonArray?

后端 未结 3 1036
谎友^
谎友^ 2020-12-17 21:26

I\'m very new to Java 8 lambdas and stuff... I want to write a lambda function that takes a JsonArray, goes over its JsonObjects and creates a list of values of certain fiel

3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-12-17 22:01

    JSONArray is a sub-class of java.util.ArrayList and JSONObject is a sub-class of java.util.HashMap.

    Therefore, new JSONObject().put("name", "John") returns the previous value associated with the key (null), not the JSONObject instance. As a result, null is added to the JSONArray.

    This, on the other hand, works:

        JSONArray jsonArray = new JSONArray();
        JSONObject j1 = new JSONObject();
        j1.put ("name", "John");
        JSONObject j2 = new JSONObject();
        j2.put ("name", "David");
        jsonArray.add(j1);
        jsonArray.add(j2);
        Stream ss = jsonArray.stream().map (json->json.toString ());
        List list = ss.collect (Collectors.toList ());
        System.out.println(list);
    

    For some reason I had to split the stream pipeline into two steps, because otherwise the compiler doesn't recognize that .collect (Collectors.toList()) returns a List.

    The output is:

    [{"name":"John"}, {"name":"David"}]
    

提交回复
热议问题