提问者:小点点

映射流操作中的强制转换调用不工作[重复]


我有以下内容(使用org.json.simple):

 import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
 ...
 final JSONArray results = (JSONArray) responseObject.get("results");
 results
        .stream()
        .filter(JSONObject.class::isInstance)
        .map(JSONObject.class::cast)
        .map(obj -> obj) // obj is still Object here, not JSONObject?

问题是在我调用map将流元素转换为JSONObject之后,在下一次调用map时,元素仍然是Object,而不是JSONObject。不确定我在这里做错了什么?

相关:是否可以在Java 8中强制转换流?


共1个答案

匿名用户

组织。json。易于理解的JSONArray扩展了java。util。ArrayList,这意味着它扩展了原始类型。

结果,<代码>结果。stream()返回原始流,而不是流

如果组织。json。易于理解的JSONArray扩展阵列列表

我相信通过以下未经检查的演员阵容,你应该能够克服这一点:

final JSONArray results = (JSONArray) responseObject.get("results");
List<Object> genericResults = (List<Object>) results;
List<JSONObject> list =
    genericResults.stream()
                  .filter(JSONObject.class::isInstance)
                  .map(JSONObject.class::cast)
                  .collect(Collectors.toList());