如何创建自定义比较器以对编号系统进行排序

时间:2015-04-29 19:22:49

标签: java sorting comparator

这是我到目前为止的代码:

package Demo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Demo {

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<String>();

        list.add("3.3.x");
        list.add("1.2.x");
        list.add("2.3.x");

        VersionComparator x = new VersionComparator();

        Collections.sort(list, x );

        for(String str : list)
            System.out.println(str);

    }

    static class VersionComparator implements Comparator {
        public int compare(String str1, String str2) {

            String firstNumberStringOne = str1.split(".")[0]; 
            String firstNumberStringTwo = str2.split(".")[0];  
            String secondNumberStringOne = str1.split(".")[1]; 
            String secondNumberStringTwo = str2.split(".")[1];  

            return;
        }

        @Override
        public int compare(Object o1, Object o2) {
            // TODO Auto-generated method stub
            return 0;
        }
    }
}

我想按照期间之前出现的第一个数字对列表中的项目进行排序。如果这两个数字相等,则转到第二个数字并比较这些数字。如果平等只是归还他们。

我不确定如何使用比较器。我试图实现它,编译器抱怨我需要在第二个比较方法中添加覆盖。我也不知道如何进行比较如何返回。我明白,如果它等于那么它返回一个0并且它小于那么它返回-1并且大于1.但是在编码方面我失去了程序如何知道如何对它进行排序。

1 个答案:

答案 0 :(得分:2)

您的VersionComparator班级正在实施Comparator界面的原始格式,其中compare方法将花费2 Object而非2 String s

通过提供String作为类型参数来实现接口。然后,编译器将识别您的compare方法,将String s作为参数,作为接口的正确实现。您不需要compare方法Object

static class VersionComparator implements Comparator<String> {

你当然需要在你的compare method中实现比较逻辑,如果int比较小于等于,则返回小于0,0或大于0的str1 ,或者根据您的自定义排序顺序,大于str2