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
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"}]