2017-10-28 106 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)); 
    } 
}); 
相关问题