ArrayListの中身がString(あるいはそれに準ずる文字列型)の場合にそれを単純にソートしようとすると思った通りにはならない
例えば
[200, 100, 40, 320, 90, 130]
という文字列型の配列をソートすると
[100, 130, 200, 320, 40, 90]
となる。
文字列型なのでこうなるが、本来はこれを
[40, 90, 100, 130, 200, 320]
このようにしたい。
なので一度Integer型に変換して配列に入れなおす。
package src;
import java.util.ArrayList;
import java.util.Collections;
public class sortString {
public static void main(String[] args) throws Exception{
ArrayList<String> sortNumString = new ArrayList<String>();//Stringの配列
ArrayList<Integer> sortNumInt = new ArrayList<Integer>();//Integer型にしたものをいれる配列
sortNumString.add(0, "200");
sortNumString.add(1, "100");
sortNumString.add(2, "40");
sortNumString.add(3, "320");
sortNumString.add(4, "90");
sortNumString.add(5, "130");
System.out.println("ソート前:"+ sortNumString);
Collections.sort(sortNumString);
for(int i = 0; i < sortNumString.size();i++){
int ArrayTmp = Integer.parseInt(sortNumString.get(i));
sortNumInt.add(i, ArrayTmp);
}
Collections.sort(sortNumInt);
System.out.println("ソート後:"+ sortNumInt);
}
}
実行結果
ソート前:[200, 100, 40, 320, 90, 130]
ソート後:[40, 90, 100, 130, 200, 320]
もっときれいな書き方はありそうだけど、とりあえず。
ちなみにデータベースから情報を持ってくる場合はSQLで調整できそう
SQLで並び順を調整すると言えばORDER BYだけどこれを
ORDER BY CONVERT(int, 持ってくくるデータのカラム)
とすればいいらしい。