Comparator を使うと、比較のたびに数字の切り出しと数値への変換が起こるので
データ数が多い場合遅くなるかもしれません。
そこで、TreeMap を使う方法もあります。
Java
1import java.util.TreeMap;
2import java.util.ArrayList;
3
4class Main {
5 public static void main(String[] args){
6 ArrayList<String> foo = new ArrayList<>();
7 foo.add("12:/search/?c=Games+Computers");
8 foo.add("5:/search/?c=Games+Computers");
9 foo.add("1:/search/?c=Games+Computers");
10 foo.add("13:/search/?c=Games+Computers");
11 foo.add("130:/search/?c=Games+Computers");
12
13 TreeMap<Integer, String> tm = new TreeMap<>();
14 for (String s : foo) tm.put(-Integer.valueOf(s.replaceAll(":.*", "")), s);
15 for (String s : tm.values()) System.out.println(s);
16 }
17}
foo にデータを戻して表示したい場合は次のようにしてください。
Java
1 int i = 0;
2 for (String s : tm.values()) foo.set(i++, s);
3 System.out.println(foo);
追記
TreeMap がダメだったので、数字の切り出しと数値への変換を最初に行ったものの
ArrayList をソートしてみました。
2つの数値の差は int の範囲に収まる程度に小さいものとします。
数値が同じ場合は、文字列の降順になるようにしました。
Java
1import java.util.Collections;
2import java.util.ArrayList;
3
4public class Main {
5 public static void main(String[] args){
6
7 ArrayList<String> foo = new ArrayList<>();
8 foo.add("12:/search/?c=Games+Computers");
9 foo.add("5:/search/?c=Games+Computers");
10 foo.add("1:/search/?c=Games+Computers");
11 foo.add("13:/search/?c=Games+Computers");
12 foo.add("130:/search/?c=Games+Computers");
13 foo.add("7:/abc/?c=Games+Computers");
14 foo.add("7:/xyz/?c=Games+Computers");
15
16 ArrayList<E> bar = new ArrayList<>();
17 for (String s : foo) bar.add(new E(s));
18
19 Collections.sort(bar);
20
21 for (E e : bar) System.out.println("(\"" + e.o + "\");");
22 }
23}
24
25class E implements Comparable<E> {
26 int n;
27 String o, s[];
28
29 E(String str) {
30 o = str;
31 s = o.split(":");
32 n = Integer.parseInt(s[0]);
33 }
34
35 public int compareTo(E e) {
36 int d = e.n - n;
37 return d == 0 ? e.s[1].compareTo(s[1]) : d;
38 }
39}
実行結果
text
1("130:/search/?c=Games+Computers");
2("13:/search/?c=Games+Computers");
3("12:/search/?c=Games+Computers");
4("7:/xyz/?c=Games+Computers");
5("7:/abc/?c=Games+Computers");
6("5:/search/?c=Games+Computers");
7("1:/search/?c=Games+Computers");
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。