0

我有一个字符串数组列表,其值如下

2.25mm
2.75mm
5mm
5.5mm

对没有小数位的值进行排序时,排序不正确。5.5mm 前进 5mm,其中 2.25mm 正确前进 2.75mm

我对比较器没有任何经验,因此非常感谢任何帮助。

4

2 回答 2

4

您将这些排序为字符串,并且字符m出现在字符之前.

mm仅删除和对解析BigDecimal值进行排序可能会更容易。

于 2012-11-27T21:58:54.967 回答
3

由于您将条目排序为String,因此它的行为不像字符表示法中的数字排序那样,.(ASCII 46)位于m(ASCII 109) 之前,因此5.5mm5mm.

通过剥离创建另一个小数点列表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");
      }
于 2012-11-27T22:00:59.373 回答