Collections.sort()メソッドで呼び出されるカスタムコンパレータを使用して、StringのArrayListをソートしようとしています。 コードは、コンパレータは適切な値を返すコンパレータ<String>は適切な値を返しますが、ArrayListはソートされません。
public static String largestNumber(final List<Integer> a) {
ArrayList<String> list = new ArrayList<String>();
for(int i=0; i<a.size(); i++) {
list.add(String.valueOf(a.get(i)));
}
Comparator<String> c = new Comparator<String>() {
public int compare(String s1, String s2) {
System.out.println("comparing: "+(s1+s2)+
" and "+(s2+s1));
System.out.println((s1+s2).compareTo(s2+s1));
return (s1+s2).compareTo(s2+s1);
}
};
for(int i=0; i<a.size(); i++) {
Collections.sort(list, c);
System.out.println("sorted:");
for(int j=0; j<a.size(); j++) {
System.out.print(list.get(j));
}
System.out.println();
}
StringBuffer sb = new StringBuffer();
for(int i=0; i<list.size(); i++) {
sb.append(list.get(i));
}
return sb.toString();
}
あります。たとえば、文字列 "303"と "330"を比較する場合は、負の値を返します。ただし、ArrayListは変更されません。どうしたの?
あなたのニーズにあまりにも多くのループがあります。あなたのコードを実行すると、リストがソートされます。また、なぜ "(s1 + s2).compareTo(s2 + s1)" VS => s1.compareTo(s2)を実行するのですか? – alexbt