用于备用字符串排序的Java Comparator

时间:2012-11-25 05:32:04

标签: java sorting comparator

编辑:比较器似乎没有做任何事情。我没有错误,但(已按字母顺序排序)数组没有变化。我希望看到SAD和PAD彼此相邻,但我不是。

我有一个字符串数组,我想根据它们如何在拨号盘上输出它们的数值对它们进行排序。也就是说,“SAD”= 723,“PAD”= 723,“SAP”= 727.我有一个按字母顺序排列的字典,我想将其重新排列到我的订单中,以便对数组进行二进制搜索。对于像SAD和PAD这样的值是相同的值,它们可以按字母顺序排序。我想尝试使用Arrays.sort(字典,myComparator)对其进行排序。

首先,这是获得我想要的最佳方式吗?我怎么可能得到这个?

其次,我如何制作自己的比较器?请注意,我只是在编程的第一门课程中,所以我们甚至还没有编写课程,它只是一堆塞进主类的东西。而且我通常根本不了解课程。因此,如果我必须去创建自己的类来完成这项工作,那么我可能需要自己编写一个快速编码。我没有覆盖链表,所以我的数据结构有点笨拙。这是我到目前为止所做的,我不知道我在做什么:

愚蠢的clumsey方式将字典放入内存,重要的一行是靠近底部:

public static String[][] dictToMem()throws FileNotFoundException{
    File myFile = new File("src/words.txt");
    Scanner input = new Scanner(myFile);
    String temp;
    String[] tempDict = new String[7];
    Arrays.fill(tempDict, "");

    while (input.hasNext()){
        temp = input.next();
        if (temp.length() < 8 && temp.indexOf('\'') + temp.indexOf('(') +   temp.indexOf('-') == -3){
            for (int i = 1; i <= 7; i++){
                if (temp.length() == i){
                    tempDict[i-1] += " " + temp;
                }
            }
        }
    }
    for (int i = 0; i<tempDict.length; i++){
        tempDict[i] = tempDict[i].trim();
    }

    String[][] dictionary = new String[7][];
    for (int i = 0; i<tempDict.length; i++){
        dictionary[i] = tempDict[i].split(" ");
    }
    for (int i = 0; i<tempDict.length; i++){
        //  ***This is the line doesn't work, compiler error***
        //  dictionary[i] = Arrays.sort(dictionary[i], String.DialPadNumCompare);
        //  Should be this:
        Arrays.sort(dictionary[i], DialPadNumCompare);
    }
    return dictionary;
}

并且比较器没有显示错误:

public static Comparator<String> DialPadNumCompare = new Comparator<String>(){
    @Override
    public int compare(String a, String b){
        if (stringToInt(a) == stringToInt(b)){
            return a.compareTo(b);
        }
        return stringToInt(b) - stringToInt(a);
    }
};

String to int是我拨打pad号码转换方法的字符串

2 个答案:

答案 0 :(得分:2)

您的比较器不正确。将其更改为:

public static Comparator<String> dialPadNumCompare = new Comparator<String>(){
    @Override
    public int compare(String a, String b){
        int inta = stringToInt(a);
        int intb = stringToInt(b);
        if (inta == intb)
            return a.compareTo(b);
        return inta - intb;
    }
};

使用以下代码调用此比较器:

Arrays.sort(dictionary, dialPadNumCompare);

这是Live Demo

答案 1 :(得分:0)

对于您的即时错误,请更改以下行:

Arrays.sort(dictionary[i], String.DialPadNumCompare);

要:

Arrays.sort(dictionary[i], DialPadNumCompare);

现在你的方式,你试图静态引用String类的不存在的成员。相反,您应该尝试引用您在自己的类中创建的静态引用DialPadNumCompare