我正在尝试按字符串长度对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());
}
}
提前感谢任何输入!
答案 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。
答案 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();
}
});