我有JSONArray
个对象,我想将每个对象映射到JSONObject
。
我试过了:
JSONArray array; //my json array
array.stream().map(obj -> (JSONObject) obj).forEach((JSONObject prof) -> {
//code
});
然而,类型已被Object
封装,因此我似乎无法将其删除。如何使用Java 8流实现这一目标?
答案 0 :(得分:6)
这里有一些问题。 JSONArray
是ArrayList
的原始子类型。因此,它继承的方法也是原始的,所有类型参数的使用都被删除并减少到Object
。只是这应该告诉你事情将来不会安全。
调用
array.stream().map(..)
是生的。因此,Function
接受的map
也是原始的。返回的Stream
也将是原始的。因此,调用的forEach
将在Object
上运行,从而删除结果类型。除了在操作之间进行投射之外,你无能为力。像
Stream stream = array.stream().map(obj -> (JSONObject) obj);
((Stream<JSONObject>) stream).forEach((JSONObject prof) -> {
// code
});
但这绝不是安全的(除非你知道JSONObject
中只有JSONArray
个对象。这带给我们......
我有一个JSONArray对象,我想将每个对象映射到一个JSONObject。
您必须决定如何进行此映射。 JSONArray
可以包含JSONObject
,字符串,数字等。只需转换为JSONObject
即可。
答案 1 :(得分:3)
您的代码无效,因为ArrayList
的基本类型JSONArray
没有指定类型参数。您可以通过强制转换来“添加”一个:
((List<?>)array).stream().map(obj -> (JSONObject) obj).forEach((JSONObject prof) -> {
//code
});
但是在你的代码示例中,我真的没有理由不使用这样的一个lambda表达式:
array.stream().forEach(obj -> {
JSONObject prof = (JSONObject) obj;
//code
});