次のような値を持つ文字列配列リストがあります
2.25mm
2.75mm
5mm
5.5mm
小数点以下を持たない値をソートすると、正しくソートされません。5.5mm は 5mm 進み、2.25mm は正しく 2.75mm 進みます
私はコンパレータの経験がないので、助けていただければ幸いです。
これらを文字列として並べ替えており、文字が文字m
の前に来.
ます。
を削除して、解析された値mm
をソートする方がおそらく簡単でしょう。BigDecimal
エントリを としてString
ソートしているため、文字表記のように数値ソートとして動作しないため、.
(ASCII 46) がm
(ASCII 109) の前に来るため5.5mm
、 よりも上に移動し5mm
ます。
を削除して別の小数点リストを作成しmm
、新しい小数点リストを次のように並べ替えます。
List<BigDecimal> decimalList = new ArrayList<BigDecimal>();
for(String elem: myList){
decimalList.add(new BigDecimal(elem.substring(0, elem.length()-2)));
}
Collections.sort(decimalList);
必要に応じて、並べ替えられた文字列リストを次のように再作成します。
myList.clear();
for(BigDecimal elem: decimalList){
myList.add(elem.doubleValue()+"mm");
}