Collection Sort不使用自定义ArrayList

时间:2017-08-19 23:51:37

标签: java android

我想以排序的形式呈现我的列表。我知道一种方法是使用Collections类并调用sort方法。我试过了,但是我的自定义类作为对象,它不能用于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);

    }
}

1 个答案:

答案 0 :(得分:2)

Java根本不知道如何对自定义类进行排序。

您有两种选择:

  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. Comparator方法提供自定义Collections#sort

    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());
        }
    
    });
    
  3. 这两个选项都会按照他们的名字(或您选择的任何属性)对动物进行排序。