Как прочитать значение y из карты результатов FieldName, FieldValue? - PullRequest
0 голосов
/ 25 мая 2020

Я построил org.jpmml.evaluator.Evaluator из файла PMML

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

1 Ответ

1 голос
/ 25 мая 2020

Есть две проблемы с вашим кодом.

Во-первых, ключи карты results - это org.dmg.pmml.FieldName, а не java.lang.String. Вы должны преобразовывать строковые ключи в ключи имен полей, иначе все поиски Map # get (Object) вернутся пустыми:

Map<FieldName, ?> results = evaluator.evaluate(..);
Object targetValue = results.get(FieldName.create("y"));

Во-вторых, значениями map являются java.lang.Object подклассы. Вы пытаетесь принудительно привести их к значению Java примитиву double, что может или не может быть успешным, в зависимости от модели. Гораздо лучшей идеей было бы привести значение к java.lang.Number и вызвать его метод Number#doubleValue() для получения примитивного значения. Да, это утомительно и многословно, но безопасно:

Number targetValue = (Number)results.get(FieldName.create("y"));
double y = targetValue.doubleValue();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...