使用比较器进行自定义排序 [英] Using comparator to make custom sort

查看:162
本文介绍了使用比较器进行自定义排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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



所以,任何人都可以指导我实现使用的技术,使排序变得更快。

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

public class CarSort实现Comparable< CarSort> {

String name;
字符串颜色;

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;
}

//实现此类的自然顺序
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();
返回a1.compareTo(a2);
}
}

public static void main(String [] args)
{
列表< CarSort> carList = new ArrayList< CarSort>();
列表< 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);

//现在这里我很困惑如何实现我的自定义排序
}
}


解决方案

我建议您为您的汽车颜色创建枚举,而不是使用字符串,枚举的自然顺序将是您声明的顺序常量。

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

 静态类ColorComparator实现比较器< CarSort> 
{
public int compare(CarSort c1,CarSort c2)
{
return c1.getColor()。compareTo(c2.getColor());
}
}

将String更改为PaintColor,然后将主汽车列表变成:

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

...

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


I want to develop a sorting demo for car list. I am using data table to display car list. Now actually I want to sort the list by car color. Here it is not sort by alphabetic order. I want to use my custom sorting order like Red car come first, then Blue, etc.

For that I try to use Java Comparator and comparable but it allows to sort in alphabetic order only.

So, can any one guide me the way to implement the technique to use so that the sorting becomes faster.

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            
     }
}

解决方案

I recommend you create an enum for your car colours instead of using Strings and the natural ordering of the enum will be the order in which you declare the constants.

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

and

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

You change the String to PaintColor and then in main your car list becomes:

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

...

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

这篇关于使用比较器进行自定义排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆