scalaでmutableなTreeMap

つくった

だれか #scala でmutableなSortedMapとかつくってたりしないのか・・・(´・ω・`) #java のやつのラッパーでもいいから・・・でもちゃんとcanBuildFrom実装してある的な・・・less than a minute ago via web

で、誰も反応してくれなかったので、とりあえず、ものすごく雑につくった

import collection.mutable
import java.{util => ju}

class TreeMap[A, B] (implicit private val ordering: Ordering[A]
  ) extends mutable.Map[A, B] {

  private val jTreeMap: ju.TreeMap[A, B] = new ju.TreeMap(ordering)

  override def -=(key: A) = {
    jTreeMap.remove(key)
    this
  }

  override def +=(kv: (A, B)) = {
    jTreeMap.put(kv._1,kv._2)
    this
  }

  override def iterator: Iterator[(A, B)] = new Iterator[(A,B)]{
    val ite = jTreeMap.entrySet.iterator

    def next = {
      val entry = ite.next
      (entry.getKey,entry.getValue)
    }

    def hasNext = ite.hasNext
  }

  override def get(key: A): Option[B] = Option(jTreeMap.get(key))

}

javaのTreeMapをwrapしただけ。しかもコンパニオンオブジェクトちゃんと実装してない(っていうかやり方わかんね)から、mapとかfilterなどの高階関数呼ぶと、scala.collection.mutable.Map型のインスタンスになるっていう超ダメな仕様*1

まぁOrderingだけimplicitにとるようにしてみたけど・・・

追記

作ってくれた人がぁ(/・ω・)/

@xuwei_k チャレンジしてみたはいいけどその辺のコードからコピペしてくる作業になってしまった… https://gist.github.com/844098less than a minute ago via web

filterすると新しいTreeMap返してくれるっぽい!
しかし、mapでTuple返しても、TreeMapではなくIterableが返ってくるな・・・toTreeMap的なmethodがimplicitであったりすればいいのか・・・?
scalaコレクション完全解説
的な本が欲しい

だいぶあとになってからの追記

他にも
https://github.com/akihiro4chawon/Scala-MutableTreeMap

*1:型だけでなく、実際のインスタンスのclassが!!!つまりキャストできない