使用比较器而不添加类

时间:2013-09-22 03:01:57

标签: java string sorting comparator

我正在尝试按字符串长度对arraylist进行排序,我知道实现Comparator,但我想知道这是否可以在我的函数中完成,而不添加任何额外的类或方法?理想情况下,我想输出最短到最长的,但我能做到!

以下是我想用比较器实现的方法的片段。

public static void sCompare(BufferedReader r, PrintWriter w) throws IOException {

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

    String line;
    int n = 0;
    while ((line = r.readLine()) != null) {
        s.add(line);
        n++;
    }
    //Collections.sort(s);  

    Iterator<String> i = s.iterator();
    while (i.hasNext()) {
        w.println(i.next());
    }
  }

提前感谢任何输入!

2 个答案:

答案 0 :(得分:3)

我认为实现Comparator接口没有任何问题。 如果您唯一关心的是在函数中执行所有操作,则可以使用匿名实现。有点像:

    Collections.sort(s, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.length() - o2.length();
        }
    });  

(那会取代你当前的行//Collections.sort(s);

PS:你永远不会使用n的价值。

PPS:您可能必须根据return声明中的顺序反转o1和o2。

implementing an interface with an anonymous class

的另一个例子

答案 1 :(得分:2)

我将假设“课程”你的意思是“顶级课程”,因此允许使用anonymous class

Collections.sort(s, new Comparator<String>() {
    public int compare(String a, String b) {
        // java 1.7:
        return Integer.compare(a.length(), b.length());
        // java 1.6
        return a.length() - b.length();
    }
});