ArrayListの中身がString型の数字のものをきれいにソートする【Java】

Pocket

FavoriteLoadingAdd to favorites

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, 持ってくくるデータのカラム)

とすればいいらしい。