如何从 FieldName, FieldValue 结果图中读取 y 值?
How to read the y value from the FieldName, FieldValue results map?
我已经从 PMML 文件构建了一个 org.jpmml.evaluator.Evaluator
Evaluator evaluator = new LoadingModelEvaluatorBuilder()
.load(new File(fileNamePmml))
.build();
并在 FieldName, FieldValue
:
的地图上对其进行了评估
Map<FieldName, ?> results = evaluator.evaluate(arguments);
通过打印结果可以看出结果是正确的:
{y={result=432.0}}
现在我想从结果中读取值:
double y = (double) results.get("y");
但是我得到了错误
Error:(58, 48) java: incompatible types: capture#1 of ? cannot be converted to double
您的代码有两个问题。
首先,results
映射的键是org.dmg.pmml.FieldName
,而不是java.lang.String
。您应该将字符串键转换为字段名称键,否则所有 Map#get(Object) 查找将返回空值:
Map<FieldName, ?> results = evaluator.evaluate(..);
Object targetValue = results.get(FieldName.create("y"));
其次,映射值是 java.lang.Object
子类。您试图将它们强制转换为 Java 原始 double
值,这可能成功也可能不成功,具体取决于模型。一个更好的主意是将值转换为 java.lang.Number
,并调用其 Number#doubleValue()
方法来获取原始值。是的,这很乏味和冗长,但它是安全的:
Number targetValue = (Number)results.get(FieldName.create("y"));
double y = targetValue.doubleValue();
我已经从 PMML 文件构建了一个 org.jpmml.evaluator.Evaluator
Evaluator evaluator = new LoadingModelEvaluatorBuilder()
.load(new File(fileNamePmml))
.build();
并在 FieldName, FieldValue
:
Map<FieldName, ?> results = evaluator.evaluate(arguments);
通过打印结果可以看出结果是正确的:
{y={result=432.0}}
现在我想从结果中读取值:
double y = (double) results.get("y");
但是我得到了错误
Error:(58, 48) java: incompatible types: capture#1 of ? cannot be converted to double
您的代码有两个问题。
首先,results
映射的键是org.dmg.pmml.FieldName
,而不是java.lang.String
。您应该将字符串键转换为字段名称键,否则所有 Map#get(Object) 查找将返回空值:
Map<FieldName, ?> results = evaluator.evaluate(..);
Object targetValue = results.get(FieldName.create("y"));
其次,映射值是 java.lang.Object
子类。您试图将它们强制转换为 Java 原始 double
值,这可能成功也可能不成功,具体取决于模型。一个更好的主意是将值转换为 java.lang.Number
,并调用其 Number#doubleValue()
方法来获取原始值。是的,这很乏味和冗长,但它是安全的:
Number targetValue = (Number)results.get(FieldName.create("y"));
double y = targetValue.doubleValue();