Java 使用流时未从功能接口获取返回的Obj
我使用流API对JSONObject和函数接口的JSONArray进行迭代并执行一些操作:Java 使用流时未从功能接口获取返回的Obj,java,json,java-8,java-stream,Java,Json,Java 8,Java Stream,我使用流API对JSONObject和函数接口的JSONArray进行迭代并执行一些操作: public void getValues(JSONObject obj){ if(obj!=null && obj.containsKey("value")){ JSONArray jsonArray = (JSONArray) obj.get("value");
public void getValues(JSONObject obj){
if(obj!=null && obj.containsKey("value")){
JSONArray jsonArray = (JSONArray) obj.get("value");
if(jsonArray!=null){
jsonArray.stream().map(getValue).forEach((item) -> {
// this item should be of FinalJSONValues obj but here i am getting generic type.
item.getAllValues()
});
}
}
}
private Function<JSONObject, FinalJSONValues> getValue = (obj) -> {
FinalJSONValues finalValues = null;
try {
finalValues = new FinalJSONValues(obj,this.values);
} catch (Exception e) {
throw new RuntimeException(e);
}
return finalValues;
};
public void getValues(JSONObject obj){
if(obj!=null&&obj.containsKey(“值”)){
JSONArray JSONArray=(JSONArray)obj.get(“值”);
if(jsonArray!=null){
jsonArray.stream().map(getValue).forEach((项)->{
//这个项目应该是FinalJSONValues obj,但这里我得到的是泛型类型。
item.getAllValues()
});
}
}
}
私有函数getValue=(obj)->{
FinalJSONValues finalValues=null;
试一试{
finalValues=新的FinalJSONValues(obj,this.values);
}捕获(例外e){
抛出新的运行时异常(e);
}
返回最终值;
};
在这段代码中,JSONArray值是流式传输的,函数接口应用于每个返回最终JSONVALUES obj的JSONObject。在流的foreach中,item应该是FinalJSONValues对象,但是我得到了一条警告消息类型安全:方法foreach(Consumer)属于原始类型流。对泛型类型流的引用应参数化
我在这里遗漏了什么吗?您得到的是什么通用类型?Java8的一些早期版本在lambda泛型的解析方面存在问题。尝试至少安装build 171,而不是最新的Java8版本。您使用的是什么JSON库?所有dang JSON库都有名为
JSONArray
或JSONArray
的类型,它们都有不同的方法。我们不必通过搜索所有的API来找出哪些API与您的代码一致。为什么您认为JSONArray
可以生成流
?如果数组包含字符串或数字怎么办?我正在使用org.json.simple库,并收到以下错误消息“类型安全:方法forEach(Consumer)属于原始类型流。对泛型类型流的引用应该参数化”,而不是FinalJSONValues对象@treffnonx保存getValue
lambda获取一个对象
,然后在lambda内强制转换到JSONObject
。