gpt4 book ai didi

java - 无法对以下 TreeMap 进行排序

转载 作者:行者123 更新时间:2023-11-29 03:57:34 26 4
gpt4 key购买 nike

for (a = 0; a < filename; a++) {
Map<Double,String> m = new HashMap<Double,String>();

String pre = "abc";
String post = ".txt";
for (int ii = 0; ii < 11; ii++) {
m.put(similarityScore[a],pre + a + post + '\n');
}
SortedSet<Double> set = new TreeSet<Double>(m.keySet());
for (Double d : set) {
System.out.println(d + " " + m.get(d));
}
}

输出:

0.5773502691896258 abc0.txt
0.5773502691896258 abc1.txt
0.5773502691896258 abc2.txt
NaN abc3.txt
0.5773502691896258 abc4.txt
NaN abc5.txt
NaN abc6.txt
NaN abc7.txt
NaN abc8.txt
0.5773502691896258 abc9.txt
NaN abc10.txt

此代码应该能够对 double 值进行排序。但它在顶部显示输出。发生什么事 ?

最佳答案

问题几乎可以肯定是NaN .

顾名思义,这不是一个实数,并且在比较方面表现得非常奇怪。是NaN大于、等于或小于 0.5773502691896258 ?它可以是这些结果中的任何一个,甚至不需要在程序的单次执行中保持一致。 NaN甚至不等于自己,这说明了当 NaN 时,关于平等法则和强排序的先入之见是如何消失的。参与其中。

因此解决方法是不使用非数字并期望 Double.compareTo()用它做你想做的事。看什么NaN 表示similarityScore()返回时,您可以采用多种方法。如果这意味着它根本不匹配,您可以让该方法返回 Double (而不是 double ),返回 null在这些情况下,然后仅将非空结果添加到 map 。如果无论如何都应该显示这些结果,那么也许您可以使用 0.0 的结果。或 -1.0 ,假设它小于任何“真实”相似性分数。如果您想要更精致的东西,那么返回像原始 double 这样纯粹和直接的东西可能会成为问题,您可能需要返回您自己的(简单的)域类。


顺便说一句 - 你到底为什么要创建并填充 HashMap , 然后使用 TreeSet获取键的迭代顺序?如果您只是创建 m作为TreeMap<Double, String> you get exactly the iteration order you want, so can just iterate over m.entrySet()`。它更清晰、更惯用(因此更易于理解)和更高效,因此没有理由不这样做。

关于java - 无法对以下 TreeMap 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5449107/

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