例如,您有一个要转换为JSONObject的pojo列表。你有一个pojo列表。但是为了转换为JSONObject,您需要使用JSONObject put方法。
JSONObject personJson = new JSONObject();
for(Person person : personList){
personJson.put("firstName", person.firstName);
personJson.put("lastName", person.lastname);
...
}
如果只是我想做的一项操作,那么我可以做到
personList.stream.map(personJson.put("firstName", person.firstName));
答案 0 :(得分:6)
JSONArray array=new JSONArray();
personList.stream().forEach(element ->
{
JSONObject personJson = new JSONObject();
personJson.put("firstName", element.firstName);
personJson.put("lastName", element.lastname);
array.add(personJson);
});
答案 1 :(得分:3)
这里提到的解决方案正在发挥作用,但它们正在改变流上下文之外的对象,应该避免使用。
因此,而不是使用.forEach()
,这是一个返回void
的终止操作。正确的方法是使用.map()
,就像名称所示,将一个值映射到另一个值。在您的情况下,您要执行的第一个操作是将Person映射到JSONObject。第二个操作是reducer函数,您希望将所有JSONObjects减少为一个JSONArray对象。
public JSONArray mapListToJsonArray(List<Person> persons) {
List<JSONObject> jsonObjects = persons
.stream()
.map(person -> {
JSONObject json = new JSONObject();
json.put("firstName", person.getFirstName());
json.put("lastName", person.getLastName());
return json;
})
.collect(Collectors.toList());
return new JSONArray(jsonObjects);
}
不幸的是,JSONArray的json.org实现没有办法轻松合并两个数组。所以我不是简化为JSONArray,而是首先将所有JSONObjects作为List收集并从中创建一个JSONArray。
如果用方法引用替换lambda表达式,解决方案看起来会更好。
public JSONArray mapListToJsonArray(List<Person> persons) {
List<JSONObject> jsonObjects = persons
.stream()
.map(this::mapPersonToJsonObject)
.collect(Collectors.toList());
return new JSONArray(jsonObjects);
}
public JSONObject mapPersonToJsonObject(Person person) {
JSONObject json = new JSONObject();
json.put("firstName", person.getFirstName());
json.put("lastName", person.getLastName());
return json;
}
答案 2 :(得分:2)
personList.forEach(person ->
{
personJson.put("firstName",person.firstName);
personJson.put("lastName", person.lastName);
});
答案 3 :(得分:1)
这是一个返回JSON数组的工作代码。
let service = TestBed.get(InteractWithServerService);
spyOn(service, 'get').and.returnValue(..)
// do test
希望这会有所帮助。快乐的编码!
答案 4 :(得分:1)
@rathna的解释是正确的。当您发现自己键入collection.stream().forEach()
时,应将其折叠为collection.forEach()
。