java - 集合排序不适用于自定义 ArrayList

标签 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);

    }
}

最佳答案

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());
        }
    
    });
    

这两个选项都会按动物的名称(或您选择的任何属性)对动物进行排序。

关于java - 集合排序不适用于自定义 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45777260/

相关文章:

Java - 如何查看一个字符是否与多个字符匹配?

android - 如何异步运行 FilterQueryProvider 的查询?

java - Kotlin Arraylist 与 Java Arraylist 的类型不匹配

androidannotations 4.0.0 不显示布局

java - Mapreduce作业运行,出现异常

java - 在循环中将 Runnable 提交到线程池是一种好习惯吗?

java - 如何: Java object-mapping with PostgreSQL's json and jsonb data types

java - unicode 字符串的 gson 序列化不起作用

java - 覆盖主页按钮的功能

android - Rest 服务器或 API 来测试我的 Restful 客户端?