按价格属性对arraylist中的对象进行排序
我正在处理这个非常小的项目,我有一个汽车对象的数组列表,我试图按价格升序打印所有车辆。当我环顾网上时,似乎每个人都在用数组来完成它,而不是数组列表?按价格属性对arraylist中的对象进行排序
关于如何使数组列表成为可能的任何想法?以下是我的代码。
public ArrayList<Car> sortPriceAcending(ArrayList<Car> cars) {
ArrayList<Car> sortedCars = new ArrayList<Car>();
Car temp;
for (int j = 0; j < cars.size() - 1; j++) {
for (int i = 0; i < cars.size() - 1; i++) {
Car car = (Car) cars.get(i);
Car car1 = (Car) cars.get(i + 1);
if (car.getPrice() > car1.getPrice()) {
temp = car;
cars.get(i) = cars.get(i + 1);
cars.get(i + 1) = temp;
sortedCars = cars;
}
}
}
return sortedCars;
}
有很多可用的排序算法。爪哇本身已经提供了一个很好的,你可以使用它与Collections#sort
(official documentation)。该方法接受任何种类的List
和ArrayList
就是其中之一。
因此,您需要定义您想要排序的订单,您想按价格排序。
您可以通过实现Comparable
这样你的汽车定义自然排序:
public class Car implements Comparable<Car> {
@Override
public int compareTo(Car other) {
return Integer.compare(this.getPrice(), other.getPrice());
}
// The other stuff of the car class
}
之后,你可以只使用Collections.sort(cars)
而且将整理根据您定义了这个自然顺序。
但是,对于一般的汽车来说,它们的自然顺序可能不是最好的想法。因此,你总是可以定义一个Comparator
对象,并使用这个顺序:
public class CarPriceComparator extends Comparator<Car> {
@Override
public int compareTo(Car first, Car second) {
return Integer.compare(first.getPrice(), second.getPrice());
}
}
你还可以用Collections.sort(cars, new CarPriceComparator())
使用它。
如果你喜欢lambda表达式与出来的Java 8你也可以用更少的代码定义相当于Comparator
喜欢这里看到:
Collections.sort(cars, Comparator.comparing(Car::getPrice))
请注意,我有没有测试代码,可能有一些小错别字。
嘿你有没有尝试过使用比较接口? 如果你只需要总是按价格排序,只能使用可比的界面。 您可以参考以下链接了解详情:
让我知道,如果你需要更多的细节
https://www.javatpoint.com/difference-between-comparable-and-comparator
我会仔细研究它现在感谢 – Elwin
如果要基于对象的多个属性进行排序,可以使用java.util.Compartor接口。 - 你将不得不使用Collections.sort(名单>升,比较器C),例:类yourComparatorimplements比较 { 公众诠释比较(OBJ OBJ1,OBJ OBJ 2){ 回报obj1.getAttribute()的compareTo (OBJ 2。的getAttribute()); } } –