我想按名称对Animal对象进行排序

时间:2016-02-19 20:05:54

标签: java

我创建了一个Animal类:

public class Animal{
     private String name; 
     private String color;
     etc...
}
然后我有一个动物的arraylist:

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

我想按字母顺序按名字对动物名单进行排序。我需要在Animal类中覆盖一个方法吗?这是如何工作的?

2 个答案:

答案 0 :(得分:3)

无需更改Animal课程中的任何内容。只需使用Comparator(假设您有一个返回名称的getName方法):

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

您还可以通过以下方式指定提取值后使用的比较器:

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

如果您使用的是java版本&lt; 8,使用Collections.sort和anonymus类作为Comparator(或使用任何其他方式获取Comparator实例比较Animal

Collections.sort(animals, new Comparator<Animal>() {

    @Override
    public int compare(Animal a1, Animal a2) {
        return a1.getName().compareTo(a2.getName()); // or different code comparing the Animals
    }

});

答案 1 :(得分:0)

如果您使用java 8进行排序,也可以使用流。

ArrayList<Animal> sortedAnimals = (ArrayList<Animal>) animals.stream().sorted((a1, a2)->a1.name.compareTo(a2.name)).collect(Collectors.toList());

sorted需要一个比较器,所以你甚至可以这样做:

ArrayList<Animal> sortedAnimals = (ArrayList<Animal>) animals.stream().sorted(Comparator.comparing(Animal::getName)).collect(Collectors.toList());

正如法比安所说,如果你想对列表进行更多控制,你可以这样做:

ArrayList<Animal> sortedAnimals = animals.stream().sorted(Comparator.comparing(Animal::getName)).collect(Collectors.toCollection(ArrayList<Animal>::new));