8

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

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

但我主要想知道我是否忽略了一些关于Collections方法的东西

4

2 回答 2

27

使用以 Comparator 作为第二个参数的函数

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

如果仅在本地使用,您可以将比较器定义为匿名类。这是一个示例,我根据其中一个字段对对象进行排序,该字段是 String :

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

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

于 2012-11-14T14:39:13.000 回答
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))          }
    }
}

现在,当您想按马力对汽车列表进行排序时:

List<Car> list = new ArrayList<Car>(myCars); //your Car list
Collections.sort(list, new CarHorsePowerComparator());
于 2012-11-14T14:54:41.193 回答