簡體   English   中英

如何根據“。”排序arraylist?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM