我对 Java 8 lambdas 和东西很陌生……我想写一个 lambda 函数,它接受一个 JSONArray
,遍历它的 JSONObject
s 并创建一个值列表某个领域。
例如,接受 JSONArray
的函数: [{name: "John"}, {name: "David"}]
并返回 ["John", "David"]
的列表。
我写了以下代码:
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class Main {
public static void main(String[] args) {
JSONArray jsonArray = new JSONArray();
jsonArray.add(new JSONObject().put("name", "John"));
jsonArray.add(new JSONObject().put("name", "David"));
List list = (List) jsonArray.stream().map(json -> json.toString()).collect(Collectors.toList());
System.out.println(list);
}
}
但是,我收到一个错误:
线程“main”中的异常 java.lang.NullPointerException
你知道如何解决吗?
原文由 CrazySynthax 发布,翻译遵循 CC BY-SA 4.0 许可协议
JSONArray 是
java.util.ArrayList
的子类, JSONObject 是java.util.HashMap
的子类。因此,
new JSONObject().put("name", "John")
返回与键关联的先前值(null
),而不是JSONObject
实例。结果,null
添加到JSONArray
。另一方面,这有效:
出于某种原因,我不得不将流管道分成两步,否则编译器无法识别
.collect (Collectors.toList())
返回List
。输出是: