按字母顺序排列复杂对象的arraylist

CQM*_*CQM 8 java sorting collections object alphabetical

我知道,Collections.sort(myArrayList)当它们是字符串时,可以按字母顺序对arraylist进行排序,但是当它们是更复杂的东西时,例如包含两个或更多变量的数据对象,包括a String.有没有办法对它们进行排序呢?

如果没有办法Collections那么我可以想象制作一个for循环或标准排序算法来查看每个对象的字符串变量并在数组中移动对象的索引.

但我想知道我是否忽视了一些Collections方法

Den*_*ret 27

使用函数作为比较器的第二个参数.

Il允许您传递Comparator实例以根据您的需要进行排序.请注意,Comparatorjavadoc包含有关构建比较器的指南.

如果比较器仅在本地使用,则可以将比较器定义为匿名类.这是一个示例,我对其中一个字段的字符串排序:

Collections.sort(groupResults, new Comparator<ProductSearchResult>() {
    public int compare(ProductSearchResult result1, ProductSearchResult result2) {
        return result1.product.getRsId().compareTo(result2.product.getRsId());
    }
});
Run Code Online (Sandbox Code Playgroud)

或者,您也可以使您的类实现Comparable接口,但这只有在您可以定义自然(明显)顺序时才有意义.

  • 谢谢这是我见过的比较器的最重要的例子 (2认同)

dst*_*zak 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))          }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当您想通过horsePower排序您的汽车列表时:

List<Car> list = new ArrayList<Car>(myCars); //your Car list
Collections.sort(list, new CarHorsePowerComparator());
Run Code Online (Sandbox Code Playgroud)