如何从 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();