如何解决如何以相反的方式对对象列表进行排序?
我有一个 Statistic 类的对象列表。它包含以下属性:
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;
}
希望它与问题相关。
解决方法
我错了。 @Eritrean 在评论中提供的答案确实是正确的。非常感谢您的帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。