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 件のコメント:
コメントを投稿