2016-02-01 41 views
0

比较器有一些问题。我做了2个领域非常简单的类,我需要与这两个领域的比较器的内部类。内部类比较器(int)

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()); 
     } 

    } 

在这种比较我有一些问题:

public static class KomparatorI implements Comparator<KlassA>{ 
     public int compare(KlassA a1, KlassA a2) { 
      return a1.getI().compareTo(a2.getI()); 
     } 
    } 

我也尝试的CompareTo但后来我需要实现字段或方法,它的“关于基本类型int不能调用的compareTo(INT)”不工作

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; 
     } 
    } 
} 

我真的不知道如何解决它。我已经查询了其他查询,但所有解决方案都不适用于我的示例。请帮助。

回答

1

你可以强制所有内容整数作为在其他的答案,但,IMO,更好地保持当前的阶级结构与类型为int和使用一个内置的方法,Integer.compare()

public static class KomparatorI implements Comparator<KlassA>{ 
    public int compare(KlassA a1, KlassA a2) { 
     return Integer.compare(a1.getI(), a2.getI()); 
    } 
} 

同样,如果你想使用可比而是用它来节省打字(并避免在逻辑错误):

public static class KomparatorI implements Comparable<KlassA>{ 
    public int compareTo(KlassA o) { 
     return Integer.compare(this.i, o.i); 
    } 
} 
+0

想要添加这个,但你比我快 – user2610529

+0

@ user2610529对我来说也会发生很多事情,迟到几分钟...... :-) – user949300

+0

非常感谢!就是这么简单,但如此有用:) –

-1

让我们来看看你痛风什么这里

a1.getI().compareTo(a2.getI()); 

它看起来像getI()回报int insteed的Integer

更改mehod的定义返回Integer保证,一切都会好的。所以里面的KlaasA

public Integer getI(){ return i};

0

在Java中,基本类型如int,floatboolean不是对象,如通讯员Integer,FloatBoolean。这意味着您不能调用它们的方法。

使用try,

Integer.valueOf(this.i).compareTo(o.i); 

你的混乱可能来自编译器会自动尝试隐蔽原始类型到其相应的对象类的事实。在上面的示例中,参数o.i发生这种情况,该参数会自动转换为Integer。 尝试搜索“java autoboxing”。

注意:您可以实际使用Integer.compare(this.i, o.i)哪种情况更好。