我使用此值
创建了arrayList ArrayList<String> list = new ArrayList<>();
list.add("a.b.c");
list.add("a.b.d");
list.add("a.b.e.f");
list.add("a.b.e.h");
我想根据字符串中'。'的数量进行排序。
也就是说,具有最小数量'。'的字符串将成为第一个字符串。
我试着这样做,
Collections.sort(list, new Comparator<String>() {
public int compare(String a, String b) {
return findDot(a) - findDot(b)
}
private findDot(String a ){
String [] result = a.split("\\.")
return result .length
}
});
但它不起作用。
我错过了什么吗?
答案 0 :(得分:2)
您的源代码错误(包含语法错误)。
正确的代码如下:(它有效,但存在更好的代码)
Collections.sort(list, new Comparator<String>() {
public int compare(String a, String b) {
return Integer.compare(findDot(a), findDot(b));
}
private int findDot(String a ){
String [] result = a.split("\\.");
return result.length;
}
});
我告诉你,如果你使用比较,使用Integer.compare(A,B)代替A - B,因为如果A太大而B太小(例如-2918291)那么A - B溢出它提出错误。
答案 1 :(得分:1)
private findDot(String a ){
String [] result = a.split("\\.")
return result .length
}
将其更改为
private int findDot(String a){
String [] result = a.split("\\.");
return result.length;
}
答案 2 :(得分:1)
对我来说很好。您唯一缺少的是方法findDot
的返回类型和几个分号,以及results .length
import java.util.Collections;
import java.util.Comparator;
public class Hello {
/**
* @param args
*/
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("a.b.e.h");
list.add("a.b.c");
list.add("a.b.e.f.h.g");
list.add("a.b.d");
list.add("a.b.e.f");
Collections.sort(list, new Comparator<String>() {
public int compare(String a, String b) {
return findDot(a) - findDot(b);
}
private int findDot(String a ){
String [] result = a.split("\\.");
return result.length;
}
});
for (String s : list) {
System.out.println(s);
}
}
}
输出
a.b.c
a.b.d
a.b.e.h
a.b.e.f
a.b.e.f.h.g
如果你只是想让它反过来排序,只需改变这个
return findDot(a) - findDot(b);
到这个
return findDot(b) - findDot(a);