2017-08-19 14 views
0

ソート済みのフォームでリストを表示したいと思います。私はそれを行う1つの方法はCollectionsクラスを使用して、sortメソッドを呼び出すことを知っています。私はそれを試みたが、ArrayList私のカスタムクラスでオブジェクトとして動作していない。コレクションカスタムで並べ替えることができませんArrayList

私はこの方法を使用してみました:

Collections.sort(nameOfAmimals); 

これは私のコードです:

package com.example.hp.learning; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ListView; 

import java.lang.reflect.Array; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 

public class A_Animals extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_a__animals); 


     ArrayList <Animal> nameOfAmimals = new ArrayList<>(); 

     nameOfAmimals.add(new Animal("Cat" , "")); 
     nameOfAmimals.add(new Animal("Dog" , "")); 
     nameOfAmimals.add(new Animal("Bird" , "")); 
     nameOfAmimals.add(new Animal("Lion" , "")); 
     nameOfAmimals.add(new Animal("Squirrel" , "")); 
     nameOfAmimals.add(new Animal("Gray Wolf" , "")); 
     nameOfAmimals.add(new Animal("Snake" , "")); 
     nameOfAmimals.add(new Animal("Beer" , "")); 
     nameOfAmimals.add(new Animal("Deer" , "")); 
     nameOfAmimals.add(new Animal("Donkey" , "")); 
     nameOfAmimals.add(new Animal("Rhinoceros" , "")); 
     nameOfAmimals.add(new Animal("Raccoon" , "")); 
     nameOfAmimals.add(new Animal("Rabbit" , "")); 
     nameOfAmimals.add(new Animal("Kangaroo" , "")); 
     nameOfAmimals.add(new Animal("Koala" , "")); 
     nameOfAmimals.add(new Animal("Octopus" , "")); 
     nameOfAmimals.add(new Animal("Parrot" , "")); 
     nameOfAmimals.add(new Animal("Swan" , "")); 
     nameOfAmimals.add(new Animal("Yak" , "")); 
     nameOfAmimals.add(new Animal("Zebra" , "")); 

     AnimalArrayAdapter animalArrayAdapter = new AnimalArrayAdapter(A_Animals.this , nameOfAmimals); 
     ListView listView = (ListView) findViewById(R.id.list_view_animals); 
     listView.setAdapter(animalArrayAdapter); 

    } 
} 
+2

必ずカスタムオブジェクトが、私はこのコード行を使用する場合、それは方法2 Collections.sort(nameOfAmimals、Comparator.comparingを使用して私にエラーを与えるComparableを実装する、またはコンパレータを作成し、Collection.sort –

答えて

2

Javaは、単にあなたのカスタムクラスをソートする方法を知りません。

あなたは2つのオプションがあります。

  1. があなたのAnimalクラスComparable<Animal>を実装し、compareToメソッドを追加してみましょう:

    class Animal implements Comparable<Animal> { 
        String name; 
    
        public Animal(String name) { 
         this.name = name; 
        } 
    
        public String getName() { 
         return this.name; 
        } 
    
        @Override 
        public int compareTo(Animal o) { 
         return this.name.compareTo(o.name); 
        } 
    } 
    
  2. Collections#sort方法にカスタムComparatorを提供します

    Collections.sort(animals, Comparator.comparing(Animal::getName)); 
    

    それとも昔ながらのJava 7の方法:

    Collections.sort(animals, new Comparator<Animal>() { 
    
        @Override 
        public int compare(Animal o1, Animal o2) { 
         return o1.getName().compareTo(o2.getName()); 
        } 
    
    }); 
    

両方のオプションは、自分の名前(または任意のプロパティ選択した)で動物をソートします。

+0

のオーバーロードされたバージョンを使用してください(Animal :: getAnimalNameInEnglish));エラー:エラー:(93,71)エラー:メソッド参照は、-sourceでサポートされていません。1.7 (メソッド参照を有効にするために-source 8以上を使用してください) –

+0

Java 8を使用できない理由は何ですか?とにかく、私は自分の答えを更新し、Java 7の方法も含めました。 – Marvin

関連する問題