gpt4 book ai didi

java未经检查的转换

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:16 26 4
gpt4 key购买 nike

我在 Java 中有一个比较器类来比较 Map 条目:

public class ScoreComp implements Comparator<Object> {

public int compare(Object o1, Object o2) {

Entry<Integer, Double> m1 = null;
Entry<Integer, Double> m2 = null;

try {
m1 = (Map.Entry<Integer, Double>)o1;
m2 = (Map.Entry<Integer, Double>)o2;
} catch (ClassCastException ex){
ex.printStackTrace();
}

Double x = m1.getValue();
Double y = m2.getValue();
if (x < y)
return -1;
else if (x == y)
return 0;
else
return 1;
}

}

当我编译这个程序时,我得到以下信息:

warning: [unchecked] unchecked cast
found : java.lang.Object
required: java.util.Map.Entry<java.lang.Integer,java.lang.Double>
m1 = (Map.Entry<Integer, Double>)o1;

我需要根据 double 值对映射条目进行排序。

如果我创建以下比较器,那么我在调用 Arrays 的 sort 函数时会出错(我从映射中获取一个条目集,然后将该集用作数组)。

public class ScoreComp implements Comparator<Map.Entry<Integer, Double>>

如何实现这个场景。

最佳答案

假设您正在使用此比较器对 TreeMap 进行排序,那么这将不起作用。 TreeMap 比较器仅用于比较映射键,而不是键->值条目。如果您的比较器需要访问这些值,那么它将必须在 map 本身中查找它们,例如

final Map<Integer, Double> map = ....

public class ScoreComp implements Comparator<Integer> {
public int compare(Integer key1, Integer key2) {
Double x = map.getValue();
Double y = map.getValue();
if (x < y)
return -1;
else if (x == y)
return 0;
else
return 1;
}
}

编辑:根据您的评论,我认为您最好的选择是创建一个封装 ID 和值的类,将这些值放入一个列表中,然后对其进行排序。

public class Item implements Comparable<Item> {
int id;
double value;

public int compareTo(Item other) {
return this.value - other.value;
}
}

然后

List<Item> list = new ArrayList<Item>();
// ... add items here
Collections.sort(list);

因为 Item 本身就是 Comparable,所以您不需要外部 Comparator(除非您想要一个)。

关于java未经检查的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176670/

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