如何根据“。”对arraylist进行排序?

时间:2013-12-29 14:15:55

标签: java sorting arraylist comparator

我使用此值

创建了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
    }

});

但它不起作用。

我错过了什么吗?

3 个答案:

答案 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);