Scala: sortBy は要素が一個だけの場合に比較を行わない
シーケンスの sortBy メソッドを利用し、要素を変換したあとにソートしたい。
変換処理で例外が発生する可能性がある場合の挙動。
シーケンスの要素が 1個だけの場合、コンペア自体が行われないため、期待した例外が送出されなかった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | scala> Seq.empty[String].sortBy( _ .toInt) res 0 : Seq[String] = List() scala> Seq( "a" ).sortBy( _ .toInt) res 1 : Seq[String] = List(a) scala> Seq( "a" , "b" ).sortBy( _ .toInt) java.lang.NumberFormatException : For input string : "b" at java.lang.NumberFormatException.forInputString(NumberFormatException.java : 65 ) at java.lang.Integer.parseInt(Integer.java : 492 ) at java.lang.Integer.parseInt(Integer.java : 527 ) at scala.collection.immutable.StringLike$ class .toInt(StringLike.scala : 247 ) at scala.collection.immutable.StringOps.toInt(StringOps.scala : 30 ) at $anonfun$ 1 .apply( : 8 ) at $anonfun$ 1 .apply( : 8 ) at scala.math.Ordering$$anon$ 5 .compare(Ordering.scala : 122 ) at java.util.TimSort.countRunAndMakeAscending(TimSort.java : 324 ) at java.util.TimSort.sort(TimSort.java : 189 ) at java.util.TimSort.sort(TimSort.java : 173 ) at java.util.Arrays.sort(Arrays.java : 659 ) at scala.collection.SeqLike$ class .sorted(SeqLike.scala : 618 ) at scala.collection.AbstractSeq.sorted(Seq.scala : 41 ) at scala.collection.SeqLike$ class .sortBy(SeqLike.scala : 597 ) at scala.collection.AbstractSeq.sortBy(Seq.scala : 41 ) ... 33 elided |
0 件のコメント:
コメントを投稿