[英]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.