我创建了一个Animal类:
public class Animal{
private String name;
private String color;
etc...
}
然后我有一个动物的arraylist:
ArrayList<Animal> animals = new ArrayList<Animal>();
我想按字母顺序按名字对动物名单进行排序。我需要在Animal类中覆盖一个方法吗?这是如何工作的?
答案 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));