У меня есть список объектов статистического класса. Он содержит следующие атрибуты:
private String name;
private double min;
private double max;
private double avg;
private double stDev;
private double variation;
private double skewness;
private double median;
private double q1;
private double q3;
private double sum;
private int count;
Во время выполнения программы они рассчитываются, и в конце я хочу создать список из 5 лучших результатов, исходя из значения точности. Мой код выглядит следующим образом:
String filePath = "src/test/resources/json/test_write_to_file.json";
SimulationOption option = JsonUtil.read(filePath);
MainController mainController = new MainController();
List<CrossValidationResult> results = mainController.start(option);
int N = 5;
List<Statistic> testingStatistics = ClassificationStatisticHelper.calculateClassificationResultsStatistics(results
.parallelStream()
.map(CrossValidationResult::getTestingResults)
.sorted(Comparator.comparingDouble(o->o.getClassificationCharacteristic().getAccuracy()).reversed())
.limit(N)
.collect(Collectors.toList()));
Я получаю сообщение об ошибке Не удается разрешить метод getClassificationCharacteristic в объекте в части getClassificationCharacteristic(). Эта ошибка исчезает, если я удаляю .reversed, но тогда я получаю N результатов снизу, а не сверху N. Очевидно, это неправильный способ делать то, что я хотел сделать. Как мне это исправить?
РЕДАКТИРОВАТЬ:
List<Statistic> testingStatistics = ClassificationStatisticHelper.calculateClassificationResultsStatistics(results
.parallelStream()
.map(CrossValidationResult::getTestingResults)
.sorted(Comparator.reverseOrder().thenComparingDouble(o->o.getClassificationCharacteristic().getAccuracy()))
.limit(N)
.collect(Collectors.toList()));
Не работает также
РЕДАКТИРОВАТЬ 2: getClassificationCharacteristic().getAccuracy() происходит от com.common.metrics.ClassificationCharacteristic. Вот как это рассчитывается:
private void calculateAccuracy() {
int correctSum = 0;
for (int i = 0; i < classes.length; i++) {
correctSum += matrix[i][i];
}
int instances = classActualSupport.values().parallelStream().reduce(Integer::sum).orElse(0);
this.accuracy = 1d * correctSum / instances;
}
Надеюсь, это имеет отношение к проблеме.
sorted
имеют методgetClassificationCharacteristic
. Например, некоторые объекты могут быть нулевыми послеmap
. - person SomeDude   schedule 17.05.2021.sorted(Comperator.comparingDouble(o -> o.getClassificationCharacteristic().getAccuracy()).reversed()
- reverseOrder() просто меняет естественный порядок - person Daniel Wosch   schedule 17.05.2021.sorted(Comparator.comparingDouble(o->((CrossValidationResult)o).getClassificationCharacteristic().getAccuracy()).reversed())
- person Majo   schedule 17.05.2021getClassificationCharacteristic().getAccuracy()
? Не могли бы вы предоставить соответствующие части кода? В противном случае это немного похоже на тупик в темноте - person Daniel Wosch   schedule 17.05.2021.sorted(Comparator.comparingDouble(o->((EvaluationDataResults) o).getClassificationCharacteristic().getAccuracy()).reversed())
- person Majo   schedule 17.05.2021