Scala: sortBy は要素が一個だけの場合に比較を行わない
シーケンスの sortBy メソッドを利用し、要素を変換したあとにソートしたい。
変換処理で例外が発生する可能性がある場合の挙動。
シーケンスの要素が 1個だけの場合、コンペア自体が行われないため、期待した例外が送出されなかった。
scala> Seq.empty[String].sortBy(_.toInt)
res0: Seq[String] = List()
scala> Seq("a").sortBy(_.toInt)
res1: 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 件のコメント:
コメントを投稿