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.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");
      }
于 2012-11-27T22:00:59.373 に答える