2012-06-01 4 views
41

プロパティでArrayListをソートしたいと思います。これはプロパティ別のソートarraylist

public class FishDB{ 

    public static Object Fish; 
    public ArrayList<Fish> list = new ArrayList<Fish>(); 

    public class Fish{ 
     String name; 
     int length; 
     String LatinName; 
     //etc. 

     public Vis (String name) { 
      this.name = name; 
     } 
    } 

    public FishDB() { 
     Fish fish; 

     fish = new Fish("Shark"); 
     fish.length = 200; 
     fish.LatinName = "Carcharodon Carcharias"; 

     fish = new Fish("Rainbow Trout"); 
     fish.length = 80; 
     fish.LatinName = "Oncorhynchus Mykiss"; 

     //etc. 
     } 
    } 
} 

は今、私は別のアクティビティで例えばlatinnameプロパティで、このArrayListをソートするにしたい...私のコードです。しかし、私はそれをどうやって行うのか分かりません。誰がどのように知っていますか?

+0

をtry 'Collections.sort(arrayList);' – Lucifer

+0

@Luciferこれを行うと、arraのジェネリック型yListはjava.lang.Comparableを実装する必要があります –

答えて

115

あなたは、例えば、Comparatorを実装する必要があります。その後、

public class FishNameComparator implements Comparator<Fish> 
{ 
    public int compare(Fish left, Fish right) { 
     return left.name.compareTo(right.name); 
    } 
} 

とこのようにそれを並べ替える:

Collections.sort(fishes, new FishNameComparator()); 
+0

ありがとうございます。でも、まだ1つの問題があります。私は活動の中でarraylistを並べ替えたい public class fishList extends ListActivity { publicクラスFishNameComparatorがコンパイラ { を実装しています:ローカルクラスFishNameComparatorの不正な修飾子です。抽象的または最終的なもののみが許可されます。 And:型FishNameComparatorは継承した抽象メソッドComparator .compare(String、String)を実装する必要があります。私はちょうどあなたの答えに立つことをしました。 – Simon

+2

@ user1380611:これをネストされたクラスとして実装する場合は、静的クラスでなければなりません。そして、私は私の例を駄目にしました。それは 'Comparator 'を実装するべきです。 –

+0

私のために完全に動作します。ここで昇順に並べ替えます。 –

40

次のようにあなたは、単にそれを行うことができますすることができます

Collections.sort(list, new Comparator<Fish>() { 
    public int compare(Fish o1, Fish o2) { 
     return o1.name.compareTo(o2.name); 
    } 
}); 
+0

既にK-balloによって回答が受け入れられています – Simon

+7

ええ、彼はよりアクセスしやすい形式にしました。 –

+1

これははるかに良い! –

関連する問題