2016-02-01 81 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)哪種情況更好。