比较器有问题。我用2个字段制作非常简单的类,我需要为这两个字段制作带有比较器的内部类。
public class KlassA {
private int i;
private String tekst;
public int getI(){
return i;
这个比较器工作正常。
public static class KomparatorText implements Comparator<KlassA>{
public int compare(KlassA a1, KlassA a2) {
return a1.getTekst().compareTo(a2.getTekst());
}
}
在这个比较器中我遇到了一些问题:&#34;无法在基本类型int&#34;
上调用compareTo(int) public static class KomparatorI implements Comparator<KlassA>{
public int compare(KlassA a1, KlassA a2) {
return a1.getI().compareTo(a2.getI());
}
}
我也尝试CompareTo然后我需要实现字段或方法而且它不起作用
public static class KomparatorI implements Comparable<KlassA>{
private int i = this.i;
public int compareTo(KlassA o) {
if (this.i < o.i)
return -1;
else if (this.getI() == o.getI())
return 0;
else
return 1;
}
}
}
我真的不知道如何修复它。我已经搜索了其他查询,但所有的解决方案都不适用于我的例子。请帮助。
答案 0 :(得分:1)
您可以像在其他答案中一样强制一切为整数,但是,IMO,最好用int保持当前的类结构并使用内置方法,Integer.compare()
git reset 87db280~1
同样,如果您希望使用Comparable,请使用它来保存输入(并避免逻辑中的错误):
public static class KomparatorI implements Comparator<KlassA>{
public int compare(KlassA a1, KlassA a2) {
return Integer.compare(a1.getI(), a2.getI());
}
}
答案 1 :(得分:0)
在Java中,int
,float
或boolean
等原始类型不是通讯对象Integer
,Float
或Boolean
等对象这意味着你不能在它们上调用方法。
尝试使用,
Integer.valueOf(this.i).compareTo(o.i);
您的困惑可能来自于编译器尝试自动将原始类型转换为其对应的对象类的事实。在上面的示例中,对于参数o.i
会发生这种情况,该参数会自动转换为Integer
。
尝试搜索&#34; java autoboxing&#34;。
注意:在这种情况下,您实际上可以使用Integer.compare(this.i, o.i)
更好。
答案 2 :(得分:-1)
让我们看看你在这里痛风
a1.getI().compareTo(a2.getI());
看起来getI()
会返回int
Integer
的{{1}}。
将mehod定义更改为返回Integer
insteed,一切都会好的。所以在你的KlaasA
public Integer getI(){ return i};