安卓如何按属性对ArrayList进行排序

68

我想通过某个属性对 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进行排序。但我不知道该如何操作。有谁知道怎么做吗?


尝试使用 Collections.sort(arrayList) 进行排序。 - Lucifer
@Lucifer 如果你这样做,那么你的arrayList的泛型应该实现java.lang.Comparable。 - IgorGanapolsky
4个回答

159

你需要实现一个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());

谢谢,但我还有一个问题。我想在一个活动中对ArrayList进行排序。一开始是这样的: public class fishList extends ListActivity{ 当我写下面这段代码时: public class FishNameComparator implements Comparator<String>{ 它会出现两个错误,说:FishNameComparator的本地类修饰符非法;只允许抽象或最终修饰符。 以及:FishNameComparator类型必须实现继承的抽象方法Comparator<String>.compare(String, String)。我刚刚按照你的答案做了。 - Simon
2
@user1380611:如果你将它实现为嵌套类,那么它必须是一个静态类。并且我弄错了示例,应该是implements Comparator<Fish> - K-ballo
2
在我这里完美运行。这里按升序排序。 - IgorGanapolsky

87

您可以使用以下代码来完成此操作:

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

4
这个更好! - imike

2

Kotlin代码

list.sortWith(Comparator { o1, o2 -> o1.name!!.compareTo(o2.name!!) })

0

有多种方法可以实现相同的目标。 最简单的解决方案是利用Java 8的功能:

Collections.sort(Fish, (t1, t2) -> t1.name().compareTo(t2.name()));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接