这是我现在的arraylist:
ArrayList<String> myArrayList = new ArrayList<String>();
[102423;asd.com, 49952;qwe.com, 76933;rty.com, 199526;fgh.com, 139388;jkl, 25114;qaz, 155766;ghj.com, 321339;vbn.com, 210513;kol.com]
我想用数字对它们进行排序。我试过以下:
Collections.sort(myArrayList)
for(String counter : myArrayList){
System.out.println(counter);
}
但它不起作用。我想分裂然后做Collections.sort然后我不知道我将如何配对他们再次。
答案 0 :(得分:4)
使用Collections.sort(List<T> list, Comparator<? super T> c)
静态方法并提供自定义Comparator,其compare()
方法从两个元素中提取数字前缀,并仅比较这些前缀。
例如,您可以使用String.split(";")
来获取数字前缀。
答案 1 :(得分:2)
使用如下比较器:
public class CustomComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o1.split(";")[0].compareTo(o2.split(";")[0]);
}
}
您的排序代码就像您写的那样:
Collections.sort(arrayList, new CustomComparator());
答案 2 :(得分:0)
它无效的原因是您已声明ArrayList
String
。因此,Collections.sort(YourArrayList)
会将其排序为lexicographicall。因此,您必须编写自己的Comparator
来读取字符串并对其进行解释并进行比较。
所以,试试这个。
List<String> list = Arrays.asList(
"102423;asd.com", "49952;qwe.com", "76933;rty.com",
"199526;fgh.com", "139388;jkl", "25114;qaz",
"155766;ghj.com", "321339;vbn.com", "210513;kol.com");
List<String> sorted = list.stream()
.sorted(Comparator.comparing(s -> String.format("%0" + (20 - s.indexOf(';')) + "d%s", 0, s)))
.collect(Collectors.toList());
for (String s : sorted)
System.out.println(s);
结果是
25114;qaz
49952;qwe.com
76933;rty.com
102423;asd.com
139388;jkl
155766;ghj.com
199526;fgh.com
210513;kol.com
321339;vbn.com
此内部代码排序列表
00000000000000102423;asd.com
00000000000000049952;qwe.com
00000000000000076933;rty.com
00000000000000199526;fgh.com
00000000000000139388;jkl
00000000000000025114;qaz
00000000000000155766;ghj.com
00000000000000321339;vbn.com
00000000000000210513;kol.com