在Java中排序List时出错“找不到合适的方法”

时间:2014-08-26 08:49:05

标签: java sorting collections arraylist

我在List Integer转换为List String之后尝试对IntegerList进行排序。它给了我这个错误:

  

找不到合适的排序方法(List,StringToInteger.CustomComparator)

这是我的代码:

public class StringToInteger {

    public static void main(String args) {
        List<String> strList = new ArrayList<String>();
        strList.add("34");
        strList.add("14");
        strList.add("42");
        strList.add("24");

        List<String> resultList = getIntegerArray(strList);
        System.out.println("before sorting"+resultList);
        Collections.sort(resultList, new CustomComparator());
        System.out.println("after sorting"+resultList);
    }

    private static List<Integer> getIntegerArray(List<String> stringArray) {
        List<Integer> result = new ArrayList<Integer>();
        for(String stringValue : stringArray) {
            try {
                //Convert String to Integer, and store it into integer array list.
                result.add(Integer.parseInt(stringValue));
            } catch(NumberFormatException nfe) {
                //System.out.println("Could not parse " + nfe);
                Log.w("NumberFormat", "Parsing failed! " + stringValue + " can not be an integer");
            } 
        }       
        return result;
    }

    class CustomComparator implements Comparator<List<Integer>> {
        @Override
        public int compare(List<Integer> o1, List<Integer> o2) {
            return o1.get(1).compareTo(o2.get(1));
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您正在比较CustomComperator中的整数列表,而您应该比较整数。 您也可以使用

对列表进行排序
Collections.sort(resultList);

Collections.reverse(resultList);

答案 1 :(得分:1)

List<String> resultList = getIntegerArray(strList);

将此行更改为

List<Integer> resultList = getIntegerArray(strList);

和这个

class CustomComparator implements Comparator<List<Integer>> {
@Override
public int compare(List<Integer> o1, List<Integer> o2) {
    return o1.get(1).compareTo(o2.get(1));
}
}

class CustomComparator implements Comparator<Integer> {
@Override
public int compare(Integer>o1, Integer o2) {
    return o1.compareTo(o2);
}
}

答案 2 :(得分:1)

阅读sort方法原型!

public static <T> void sort(List<T> list, Comparator<? super T> c) {

你的代码那样做:

Collections.sort(resultList, new CustomComparator());

这是:

Collections.sort(List<String>, Comparator<List<Integer>>); 
  • getIntegerArray返回List<Integer>。您的编译器应该警告您或抛出错误。
  • 根据排序合同,它期望Comparator<? super String>Comparator<List<Integer>> 一个Comparator<? super String>

对于其他人,其他答案完成了我的答案。