gpt4 book ai didi

Java 在新的 hashmap 中对参数进行排序,而不是返回到 main

转载 作者:行者123 更新时间:2023-11-30 09:28:34 27 4
gpt4 key购买 nike

我正在开发一个 KNN 项目,我正在尝试对我在新的 HashMap 中计算出的欧几里得距离以及索引进行排序,然后将它们带回我的主项目。这是我对距离进行排序的代码。但是, public intcompare() 函数仅返回 int,我无法将其设置为 public doublecompare() 并且由于我所有的距离都是 double ,所以我无法使用此函数。我将不胜感激任何帮助,非常感谢。

HashMap<Integer, KnnBundle> knnBundleHashMap = new HashMap<Integer, knnBundle>();

// cnt is the size
for(int i = 0; i< cnt; i++){
knnBundleHaspMap.put(i, newKnnBundle(xarray[i], yarray[i], classes[i], euclid[i]);
}

// not yet sorted
List<KNNBundle>sortedEuclid = new ArrayList<knnBundle>(knnBundleHaspMap.values());

Collections.sort(sortedEuclid, new Comparator<KNNBundle>() {

public int compare(KNNBundle o1, KNNBundle o2) {
return o1.getEuclid2() - o2.getEuclid2();
}
});

最佳答案

使用Double.compare:

return Double.compare(o1.getEuclid2(), o2.getEuclid2());

一般来说,您不应该在比较方法中使用减法,因为它不能正确处理溢出、正零与负零、NaN 等问题。

在 Java 8+ 中,您可以更轻松地将其编写为:

   List<KNNBundle>sortedEuclid =
knnBundleHaspMap.values()
.stream()
.sorted(Comparator.comparingDouble(KNNBundle::getEuclid2))
.collect(Collectors.toList());

关于Java 在新的 hashmap 中对参数进行排序,而不是返回到 main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51666326/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com