1

を持っていpublic List<FriendProfile> friends = new ArrayList<FriendProfile>();ます。サーバーから情報を読み取って、フレンド リストを初期化します。FriendProfile オブジェクトには、int という int が含まれています。private int userPosition;

userPosition友達リストが初期化されたら、リストのインデックス 0 で最高の FriendProfile オブジェクトを使用して友達リストを並べ替え、それに応じて、2 番目に高いインデックス 1 で並べ替えたいと思いますuserPosition...

ソート アルゴリズムを記述できると思いますが、事前に記述されたコードを探しています (JDK にはいくつかのメソッドが用意されているのではないでしょうか?)

助けていただければ幸いです。

4

7 に答える 7

6

を使用Collections.sort()して指定しますComparator

Collections.sort(friends,
                 new Comparator<FriendProfile>()
                 {
                     public int compare(FriendProfile o1,
                                        FriendProfile o2)
                     {
                         if (o1.getUserPosition() ==
                                 o2.getUserPosition())
                         {
                             return 0;
                         }
                         else if (o1.getUserPosition() <
                                      o2.getUserPosition())
                         {
                             return -1;
                         }
                         return 1;
                     }
                 });

またはFriendProfile実装していますComparable<FriendProfile>

于 2012-06-26T11:40:39.840 に答える
1

今はボクシングする必要はありません (つまりOBJECT、Collections.Sort の compareTo で挿入された new 演算子を使用して valueOf を使用して作成する必要はありません)。

1)昇順の場合

Collections.sort(temp, new Comparator<XYZBean>() 
{
     @Override
     public int compare(XYZBean lhs, XYZBean rhs) {

       return Integer.valueOf(lhs.getDistance()).compareTo(rhs.getDistance());
      }
 });

1)降順の場合

Collections.sort(temp, new Comparator<XYZBean>() 
{
     @Override
     public int compare(XYZBean lhs, XYZBean rhs) {

       return Integer.valueOf(rhs.getDistance()).compareTo(lhs.getDistance());
      }
 });
于 2015-09-18T14:21:58.737 に答える
1

同等のインターフェイスを実装します。

class FriendProfile implements Comparable<FriendProfile> {

    private int userPosition;

    @Override
    public int compareTo(FriendProfile o) {

        if(this.userPosition > o.userPosition){
            return 1;
        }
        return 0;
    }

}

Collection.sort(List) メソッドを呼び出すだけです。

    FriendProfile f1=new  FriendProfile();
    f1.userPosition=1;
    FriendProfile f2=new  FriendProfile();
    f2.userPosition=2;
    List<FriendProfile> list=new ArrayList<FriendProfile>();
    list.add(f2);
    list.add(f1);
    Collections.sort(list);

リストがソートされます。

于 2012-06-26T11:43:52.103 に答える
0

これには 2 つの方法があります。

1. FriendProfile はインターフェイス Comparable を実装できます。

public class FriendProfile implements Comparable<FriendProfile>
{
   public int compareTo(FriendProfile that)
   {
     // Descending order
     return that.userPosition - this.userPosition;
   }
}

...

Collections.sort(friendProfiles);

2. Comparator を書くことができます。

public class FriendProfileComparator implements Comparator<FriendProfile>
{
   public int compare(FriendProfile fp1, FriendProfile fp2) 
   {
     // Descending order
     return fp2.userPosition - fp1.userPosition;
   }
}

...

Collections.sort(friendProfiles, new FriendProfileComparator());

プリミティブではなくオブジェクトを比較する場合は、ラッパー オブジェクトの compareTo に委譲できることに注意してください。例えばreturn fp2.userPosition.compareTo(fp1.userPosition)

最初のものは、オブジェクトに実装したい自然な順序がある場合に役立ちます。Integer は数値順に実装し、String はアルファベット順に実装します。2 番目は、異なる状況で異なる順序が必要な場合に役立ちます。

Comparator を作成する場合は、どこに配置するかを検討する必要があります。状態がないため、Singleton または FriendProfile の静的メソッドとして記述できます。

于 2012-06-26T12:04:54.780 に答える
0

You can use 一方向のみでソートする場合は、java.lang.Comparable インターフェイス

But if you want to sort 複数の方法で、java.util.Compartor インターフェイスを使用します。

例えば:

オブジェクトがそのロール番号でソートされるクラス

public class Timet {

    String name;
    int roll_no;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getN() {
        return roll_no;
    }
    public void setN(int n) {
        this.roll_no = n;
    }
    public Timet(String name, int n) {

        this.name = name;
        this.roll_no = n;
    }

    public String toString(){
        return this.getName();



    }

}

並べ替えのクラス:

public class SortClass {


    public void go(){

        ArrayList<Timet> arr = new ArrayList<Timet>();
        arr.add(new Timet("vivek",5));
        arr.add(new Timet("alexander",2));
        arr.add(new Timet("catherine",15));

        System.out.println("Before Sorting :"+arr);





        Collections.sort(arr,new SortImp());

        System.out.println("After Sorting :"+arr);


    }
    class SortImp implements Comparator<Timet>{

        @Override
        public int compare(Timet t1, Timet t2) {




            return new Integer(t1.getN()).compareTo (new Integer((t2.getN())));
        }



    }
    public static void main(String[] args){

        SortClass s = new SortClass();
        s.go();

    }

}
于 2012-06-26T12:36:31.037 に答える
0

に基づいて比較Collections.Sortするカスタムを使用して記述します。ComparatoruserPosition

于 2012-06-26T11:40:27.343 に答える
0

Collections.sort メソッドで Comparator を使用する

java.util.Collections.sort(list, new Comparator<FriendProfile >(){
     public int compare(FriendProfile a,  FriendProfile b){
          if(a.getUserPosition() > b.getUserPosition()){
             return 1;
           }else if(a.getUserPosition() > b.getUserPosition()){
            return -1;
         }
          return 0;
     }
});

このリンクを参照してください

于 2012-06-26T11:40:27.273 に答える