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, 持ってくくるデータのカラム)
とすればいいらしい。