2017-12-25 3 views
1

私は2次元配列を持ち、それをセグメント型(既に定義済みのクラス)のArrayListに取り込みます。私は、各オブジェクトの2番目の要素に基づいてArraylistを昇順に並べ替える必要があります。私はそれをソートするために、同等クラスを使用して、このlinkをチェックしましたが、それは私と一緒に動作しません、それは整数を使ってリストをソートする際にintを参照解除することはできません

intは

エラーを間接参照することができない私に与えます。以下は

object.getR()は私に、各オブジェクトの中央要素を与えることを私のコード

ノートです。例えば、型セグメントx= (6,8,4)の目的は、その後x.gerR()は私

int[][] input = { 
    {0, 3, 3}, {3,5,2}, {6,8,4}, {9,11,3}, {2,4,4}, {5,6,3}, {7,8,3},{9,12,1} 
}; 

ArrayList<Segment> data = new ArrayList<>(); 

for (int[] input1 : input) { 
    data.add(new Segment(input1[0], input1[1], input1[2])); 
} 
Collections.sort(data, new Comparator<Segment>() { 
    @Override 
    public int compare(Segment lhs, Segment rhs) { 
     return lhs.getR().compareTo(rhs.getR()); 
    } 
}); 
+1

「それは私と一緒に動作しません」それはあなたのために動作しませんどのように正確に:?今、私たちのようなコードを記述することができますsort(Comparator)メソッドを持っても一覧表示されますかエラー/例外/予想外の結果が出ていますか?(降順ではなく昇順など) – Pshemo

+0

あなたが見ている実際のエラーメッセージを投稿してください。 – bhspencer

+0

あなたの問題は並べ替えとは関係ありません。コンパイルエラーです。 – davidxxx

答えて

0

int cannot be dereferenced 8.提案値を与えることgetR()戻りintないInteger(あなたのタイトルが示唆するものにもかかわらず)。 intプリミティブタイプですので、compareToのようなメソッドはありません。 int値を比較する最も簡単な方法は、Integer.compare(a, b)です(デフォルトでは降順で結果を取得する場合は昇順で返します)Integer.compare(b, a)

だから、Javaの8以来、私たちはラムダとメソッドのリファレンスを使用することができますBTW

return Integer.compare(lhs.getR(), rhs.getR()); 

return lhs.getR().compareTo(rhs.getR()); 

を変更。

data.sort(Comparator.comparingInt(Segment::getR)); 

代わりの

Collections.sort(data, new Comparator<Segment>() { 
    @Override 
    public int compare(Segment lhs, Segment rhs) { 
     return Integer.compare(lhs.getR(), rhs.getR()); 
    } 
}); 
関連する問題