0

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

这是我想用来实现比较器的方法的片段。

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());
    }
  }

提前感谢您的任何意见!

4

2 回答 2

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。

另一个使用匿名类实现接口的例子

于 2013-09-22T03:14:34.370 回答
2

我将假设“类”是指“顶级类”,因此允许使用匿名类

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();
    }
});
于 2013-09-22T03:15:14.297 回答