如何迭代扩展Set <comparative>,Scala中的Comparable的Java Inteface?

时间:2016-02-05 01:19:16

标签: java scala types type-conversion

我使用的是版本2.11.6的Scala-ide。在Java文件中,界面如下所示:

interface CSet extends Set<Comparable>, Comparable {

以前只需导入转化功能就可以了。

import scala.collection.JavaConversions._

所以我可以使用

for { x <- Some_CSet } ...

一切都很好。但我确实注意到代码无法通过sbt的编译器。突然间,那些也成为了ide中的错误:“flatMap不是CSet的成员”。我尝试了各种方式来编写自己的隐式转换并失败了。例如:

implicit def convert(s: CSet): Set[Comparable[_]] = {
      val ss = MSet[Comparable[_]]()
      val iter = s.iterator()
      while (iter.hasNext) {
          val nxt = iter.next()
          ss.add(nxt)
      }
      ss
  }

类型检出但存在运行时错误。

例如:

val cset = //some api from that package to get a CSet
for { e <- cset} println(e)  //this seems to be stuck in a infi loop,
                             //but not in the implicit conversion

但是,以下不需要 flatMap 的代码与上面的转换完美配合。

val x = cset1 diff cset2    //where cset1 and cset2 will be eventually     
                            //converted to scala sets

有人能给出解决方案吗?无论是隐式转换还是解释为什么ide都是这样的。

0 个答案:

没有答案