使用比较器进行自定义排序 [英] Using comparator to make custom sort
问题描述
为此,我尝试使用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屋!