2017-10-28 107 views
1

我想使用比較器對String類型的ArrayList進行排序。如果ArrayList存儲對象,我只找到了有關如何去做的例子。Java:ArrayList <String>使用比較器進行排序(ArrayLists不存儲對象)

我有一個ArrayList的字符串有10個符號,最後5個符號是數字,形成一個數字。我想按照每個字符串末尾的那些數字的升序來解決一個數組列表。我怎樣才能做到這一點?

謝謝!

+3

'String' **是一個**對象。你有什麼嘗試(完全)?讓我們看看一些代碼。 –

+0

'private static ArrayList allCodes = new ArrayList (); //添加一些代碼.... private void sortAllCodesNumbers(){ Collections.sort(allCodes,allCodes.getCompByNum()); }'' –

+0

公共靜態比較 getCompByNum() { 比較器COMP =新比較(){ @覆蓋 公衆詮釋比較(allBooks B1,B2 allBooks) { 字符串IDnumbers1 = b1.substring(AUTHOR_ID_LENGHT + GENRE_LENGTH); int number1 = Integer.parseInt(IDnumbers1); String IDnumbers2 = b2.substring(AUTHOR_ID_LENGHT + GENRE_LENGTH); int number2 = Integer.parseInt(IDnumbers1); return number1.compareTo(number2); } }; return comp; }' –

回答

3

這是完成您的任務的一種方式; sorted接受Comparator對象。

List<String> result = myArrayList.stream().sorted(Comparator.comparingInt(e -> Integer.parseInt(e.substring(5)))) 
              .collect(Collectors.toList()); 

或者乾脆:

myArrayList.sort(Comparator.comparingInt(e -> Integer.parseInt(e.substring(5)))); 
+0

不需要正則表達式。爲什麼不只是e.substring(5)? –

+0

@JBNizet真的,我會用你的想法。 –

1

Collections.sort可以整理你有比較列表。另外你需要String.substring:

Collections.sort(list, new Comparator<String>(){ 
    @Override 
    public int compare(String o1, String o2) { 
     return o1.substring(5).compareTo(o2.substring(5)); 
    } 
}); 
相關問題