我想开发一个汽车清单排序演示。我使用数据表来显示汽车列表。现在我想按汽车颜色对列表进行排序。这里不是按字母顺序排序。我想使用我的自定义排序顺序,如红色汽车先来,然后是蓝色,等等。
为此,我尝试使用java Comparator
及 Comparable
但它只允许按字母顺序排序。
那么,有谁能指导我如何实现要使用的技术,从而加快排序速度呢。
class Car implements Comparable<Car>
{
private String name;
private String color;
public Car(String name, String color){
this.name = name;
this.color = color;
}
//Implement the natural order for this class
public int compareTo(Car c) {
return name.compareTo(c.name);
}
static class ColorComparator implements Comparator<Car> {
public int compare(Car c1, Car c2) {
String a1 = c1.color;
String a2 = c2.color;
return a1.compareTo(a2);
}
}
public static void main(String[] args) {
List<Car> carList = new ArrayList<>();
List<String> sortOrder = new ArrayList<>();
carList.add(new Car("Ford","Silver"));
carList.add(new Car("Tes","Blue"));
carList.add(new Car("Honda","Magenta"));
sortOrder.add("Silver");
sortOrder.add("Magenta");
sortOrder.add("Blue");
// Now here I am confuse how to implement my custom sort
}
}
9条答案
按热度按时间0yg35tkg1#
我建议您为汽车颜色创建一个枚举,而不是使用字符串,枚举的自然顺序将是您声明常量的顺序。
和
将字符串更改为paintcolor,然后在主目录中,您的汽车列表变为:
eoigrqb62#
这个怎么样:
原则上,我同意使用
enum
是一种更好的方法,但此版本更灵活,因为它允许您定义不同的排序顺序。更新
Guava将这一功能烘焙到它的
Ordering
类别:这个版本没有那么冗长。
再次更新
java 8使比较器更加简洁:
daupos2t3#
比较器在线。。。
fivyi3re4#
我认为可以这样做:
要进行排序,请使用以下命令:
8cdiaqws5#
我不得不做一些类似肖恩和伊莱克斯的回答。
但是我有太多的选项来明确定义排序顺序,只需要将某些条目浮动到列表的前面。。。以指定的(非自然)顺序。
希望这对其他人有帮助。
vxqlmq5t6#
我会这样做:
所有学分归@sean patrick floyd:)
moiiocjp7#
在java 8中,您可以执行以下操作:
您首先需要一个枚举:
车辆等级:
然后,使用您的汽车列表,您可以简单地执行以下操作:
ej83mcc08#
将一个枚举类型定义为
更改的数据类型
color
从…起String
到Colors
将颜色的getter和setter方法的返回类型和参数类型更改为Colors
定义比较器类型如下将元素添加到列表后,通过将列表和比较器对象作为参数传递来调用集合的排序方法
即,
Collections.sort(carList, new ColorComparator());
然后使用ListIterator
.完整的类实现如下所示:
u7up0aaq9#
仅使用简单循环:
并按列表中的顺序排序