我知道Collections.sort(myArrayList)
可以在字符串中按字母顺序对arraylist进行排序,但是当它们是更复杂的东西时,例如包含两个或更多变量(包括String
的数据对象)。有没有办法对它们进行排序呢?
如果没有Collections
的方法,那么我可以想象制作一个for循环或标准排序算法来查看每个对象的字符串变量并在数组中移动对象的索引。
但我很想知道我是否忽略了Collections
方法
答案 0 :(得分:27)
使用the function taking as second parameter a Comparator。
Il允许您传递Comparator实例以根据您的需要进行排序。请注意,javadoc of Comparator包含有关构建比较器的指南。
如果比较器仅在本地使用,则可以将其定义为匿名类。这是一个示例,我将对象的一个字段排序为String:
Collections.sort(groupResults, new Comparator<ProductSearchResult>() {
public int compare(ProductSearchResult result1, ProductSearchResult result2) {
return result1.product.getRsId().compareTo(result2.product.getRsId());
}
});
或者,您也可以让您的类实现Comparable接口,但只有在您可以定义自然(明显)的顺序时才有意义。
答案 1 :(得分:12)
我将创建一个实现Comparator接口的内部类:
public class Car {
public double horsePower;
class CarHorsePowerComparator implements Comparator<Car> {
@Override
public int compare(Car car1, Car car2) {
return Integer.valueOf(car.horsePower).compareTo(Integer.valueOf(car2.horsePower)) }
}
}
现在,当您想通过horsePower对您的汽车列表进行排序时:
List<Car> list = new ArrayList<Car>(myCars); //your Car list
Collections.sort(list, new CarHorsePowerComparator());