Cra*_*hax 13 java lambda java-8 java-stream
我对 Java 8 lambdas 和其他东西很陌生……我想编写一个 lambda 函数,它接受 a 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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误:
线程“main”中的异常 java.lang.NullPointerException
你知道如何解决吗?
小智 12
尝试使用 IntStream。
List<String> jsonObject = IntStream
.range(0,jsonArray.size())
.mapToObj(i -> jsonArray.getJSONObject(i))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
JSONArray是 的子类java.util.ArrayList
,JSONObject是 的子类java.util.HashMap
。
因此,new JSONObject().put("name", "John")
返回与键 ( null
) 关联的先前值,而不是JSONObject
实例。结果,null
被添加到JSONArray
.
另一方面,这有效:
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<String> ss = jsonArray.stream().map (json->json.toString ());
List<String> list = ss.collect (Collectors.toList ());
System.out.println(list);
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我必须将流管道分为两个步骤,因为否则编译器无法识别.collect (Collectors.toList())
返回List
.
输出是:
[{"name":"John"}, {"name":"David"}]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
51268 次 |
最近记录: |