4

次のようなクラスがあるとします (get/set は省略):

class InfoClass{

   String name;
   String place;
   double distance;

}

そして、メイン アクティビティ内から次のようなクラスの配列を作成します。

InfoClass[3] myInfoClass;

myInfoClass[0].name = "venue one";
myInfoClass[0].place = "place one";
myInfoClass[0].distance = 11.23234;

myInfoClass[1].name = "venue two";
myInfoClass[1].place = "place two";
myInfoClass[1].distance = 9.2345643;

myInfoClass[2].name = "venue three";
myInfoClass[2].place = "place three";
myInfoClass[2].distance = 5.23432;

配列 (myInfoClass[]) を並べ替えて、距離メンバーで並べ替えるにはどうすればよいですか? つまり、上記の例では、要素 [2] の距離が最小で、要素 [0] の距離が最大であるため、配列が逆になりますか?

これまたは他の方法でクラスに追加できる関数はありますか?

4

8 に答える 8

5

これはうまくいくはずです..

    public static void main(String[] args){
    InfoClass[] dd = new InfoClass[3];

    Arrays.sort(dd, new Comparator<InfoClass>(){

        @Override
        public int compare(InfoClass arg0, InfoClass arg1) {
            // TODO Auto-generated method stub
            if(arg0.distance == arg1.distance){
                return 0;
            }else if(arg0.distance < arg1.distance){
                return -1;
            }else{
                return 1;
            }
        }
    });
}
于 2012-06-15T12:49:50.750 に答える
4

デフォルトでオブジェクトのソートを提供したい場合にもComparable 使用したくない場合は、クラスを変更してインターフェイスを実装してください。Comparatorarray/collectionComparable

class InfoClass implements Comparable<InfoClass> {

String name;
String place;
double distance;

@Override
public int compareTo(InfoClass o) {
    return new Double(this.distance).compareTo(new Double(o.distance));
}

そして、それらを並べ替えることができます

Arrays.sort(myInfoClass)
于 2012-06-15T12:57:28.000 に答える
4

独自のを使用java.util.Arrays.sort()して指定しますComparator

InfoClass[] myInfoClass = new InfoClass[3];

myInfoClass[0] = new InfoClass();
myInfoClass[1] = new InfoClass();
myInfoClass[2] = new InfoClass();

myInfoClass[0].name = "venue one";
myInfoClass[0].place = "place one";
myInfoClass[0].distance = 11.23234;

myInfoClass[1].name = "venue two";
myInfoClass[1].place = "place two";
myInfoClass[1].distance = 9.2345643;

myInfoClass[2].name = "venue three";
myInfoClass[2].place = "place three";
myInfoClass[2].distance = 5.23432;

Arrays.sort(myInfoClass,
            new Comparator<InfoClass>()
            {
                public int compare(InfoClass o1, InfoClass o2)
                {
                    if (o1.distance == o2.distance)
                    {
                        return 0;
                    }
                    else if (o1.distance < o2.distance)
                    {
                        return -1;
                    }
                    return 1;
                }
            });
于 2012-06-15T12:48:25.413 に答える
4

次のようなカスタム コンパレータで Arrays.Sort を使用できます。

Arrays.Sort(myInfoClass, new Comparator<InfoClass>() {
    @Override
    public int compare(InfoClass o1, InfoClass o2){
        if (o1==null && o2==null) return 0;
        if (o1 == null) return -1;
        if (o2 == null) return 1;
        return o1.distance.compareTo(o2.distance);
    }
});

編集:勝利の null チェック。

于 2012-06-15T12:49:46.740 に答える
2
Arrays.sort(myInfoClass, new Comparator<InfoClass>() {
  @Override
  public int compare(InfoClass o1, InfoClass o2) {
    return Double.valueOf(o1.distance).compareTo(o2.distance);
  }
});
于 2012-06-15T12:52:52.433 に答える
1

Also sorting in descending order

Arrays.sort(aStudents, Collections.reverseOrder());

Internally Collections define method calls

`public static <T> Comparator<T> reverseOrder() {
    return (Comparator<T>) REVERSE_ORDER;
}

public int compare(Comparable c1, Comparable c2) { return c2.compareTo(c1); }`

于 2012-06-15T13:27:47.720 に答える
1

配列を ArrayList に変換し、Collection.sortメソッドを使用して ArrayList を並べ替えます。

于 2012-06-15T12:49:46.050 に答える