【发布时间】:2012-11-27 21:55:20
【问题描述】:
我有一个字符串数组列表,其值类似于
2.25mm
2.75mm
5mm
5.5mm
当对没有小数位的值进行排序时,排序不正确。 5.5mm 前进 5mm,而 2.25mm 正确前进 2.75mm
我对比较器没有任何经验,因此非常感谢任何帮助。
【问题讨论】:
我有一个字符串数组列表,其值类似于
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比@向上移动987654325@。
通过剥离mm创建另一个小数点列表,将新的小数点列表排序如下:
List<BigDecimal> decimalList = new ArrayList<BigDecimal>();
for(String elem: myList){
decimalList.add(new BigDecimal(elem.substring(0, elem.length()-2)));
}
Collections.sort(decimalList);
如果您愿意,可以将排序后的 string 列表重新创建为:
myList.clear();
for(BigDecimal elem: decimalList){
myList.add(elem.doubleValue()+"mm");
}
【讨论】: