如何将对象流映射到特定类型

Rog*_*gue 5 java java-8

我有一个JSONArray对象,我想将每个对象映射到一个JSONObject.

我试过了:

JSONArray array; //my json array
array.stream().map(obj -> (JSONObject) obj).forEach((JSONObject prof) -> {
    //code
});
Run Code Online (Sandbox Code Playgroud)

然而,这种类型已被封装Object,因此我似乎无法将其删除.如何使用Java 8流实现此目的?

Sot*_*lis 6

这里有几个问题.JSONArray是一个原始子类型ArrayList.因此它继承的方法也是原始的,它们的所有类型参数都被擦除并减少到Object.只是这应该告诉你事情不会安全.

调用

array.stream().map(..)
Run Code Online (Sandbox Code Playgroud)

是生的.因此Function,map接受也将是原始的.退回的Stream也将是原始的.因此,forEach调用将对Object擦除的结果类型进行操作.除了在操作之间进行投射之外,你无能为力.就像是

Stream stream = array.stream().map(obj -> (JSONObject) obj);
((Stream<JSONObject>) stream).forEach((JSONObject prof) -> {
    // code
});
Run Code Online (Sandbox Code Playgroud)

但这绝不是安全的(除非你知道只有JSONObject对象JSONArray).这让我们...

我有一个JSONArray对象,我想将每个对象映射到一个JSONObject.

您必须决定如何进行此映射.JSONArray可以包含JSONObject,字符串,数字等.简单地转换为一个JSONObject将无法正常工作.