[英]how to sort arraylist according to “.”?
我用这个值创建了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
}
});
但这没有用。
我错过了什么 ?
您的源代码错误(它包含语法错误)。
正确的代码如下:(它可以工作,但是存在更好的代码)
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;
}
});
并且我建议您,如果使用compare,请使用Integer.compare(A,B)代替A-B,因为如果A太大而B太小(例如-2918291),则A-B溢出并且会引发错误。
private findDot(String a ){
String [] result = a.split("\\.")
return result .length
}
更改为
private int findDot(String a){
String [] result = a.split("\\.");
return result.length;
}
对我来说很好。 您唯一缺少的是方法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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.