java – 使用比较器进行自定义排序

我想为汽车列表开发排序演示。我使用数据表来显示汽车列表。现在实际上我想按车颜色对列表排序。这里它不是按字母顺序排序。我想使用我的自定义排序顺序,如红车先来,然后蓝色等。

为此,我尝试使用Java Comparator和可比性,但它允许按字母顺序排序。

所以,任何一个指导我的方式来实现使用的技术,使排序变得更快。

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;    

public class CarSort implements Comparable<CarSort>{

    String name;
    String color;

    public CarSort(String name, String color){
        this.name = name;
        this.color = color;
    } 

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }

    //Implement the natural order for this class
    public int compareTo(CarSort c)
    {
        return getName().compareTo(c.getName());
    }

    static class ColorComparator implements Comparator<CarSort>
    {            
         public int compare(CarSort c1, CarSort c2)
         {
             String a1 = c1.getColor();
             String a2 = c2.getColor();
             return a1.compareTo(a2);
         }
     }

     public static void main(String[] args)
     {
         List<CarSort> carList = new ArrayList<CarSort>();
         List<String> sortOrder = new ArrayList<String>();

         carList.add(new CarSort("Ford Figo","Silver"));
         carList.add(new CarSort("Santro","Blue"));
         carList.add(new CarSort("Honda Jazz","Magenta"));
         carList.add(new CarSort("Indigo V2","Red"));

         sortOrder.add("Red");
         sortOrder.add("Magenta");
         sortOrder.add("Blue");
         sortOrder.add("Silver");            

         // Now here I am confuse how to implement my custom sort            
     }
}
最佳答案
我建议你为你的汽车颜色创建一个枚举,而不是使用字符串,并且枚举的自然排序将是你声明常量的顺序。

public enum PaintColors {
    SILVER, BLUE, MAGENTA, RED
}

 static class ColorComparator implements Comparator<CarSort>
 {
     public int compare(CarSort c1, CarSort c2)
     {
         return c1.getColor().compareTo(c2.getColor());
     }
 }

你将字符串更改为PaintColor,然后在主要你的车列表成为:

carList.add(new CarSort("Ford Figo",PaintColor.SILVER));

...

Collections.sort(carList, new ColorComparator());

转载注明原文:java – 使用比较器进行自定义排序 - 代码日志