Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从scala访问java二维向量_Java_Scala_Vector_Multidimensional Array - Fatal编程技术网

从scala访问java二维向量

从scala访问java二维向量,java,scala,vector,multidimensional-array,Java,Scala,Vector,Multidimensional Array,这是我的情况: 我用DefaultTableModel创建了一个表 因此,当我使用getDataVector时,我得到了一个二维java.util.Vector 当我使用toSeq或任何其他转换器时,我得到如下结果 Buffer([5.0, 1.0, 50.0], [10.0, 1.5, 40.0], [2.0, 1.5, 90.0], [1.0, 1.0, 100.0], [6.0, 3.0, 100.0], [16.0, 3.5, 50.0]) 内部对象作为java.lang.Object

这是我的情况: 我用DefaultTableModel创建了一个表

因此,当我使用getDataVector时,我得到了一个二维java.util.Vector

当我使用toSeq或任何其他转换器时,我得到如下结果

Buffer([5.0, 1.0, 50.0], [10.0, 1.5, 40.0], [2.0, 1.5, 90.0], [1.0, 1.0, 100.0], [6.0, 3.0, 100.0], [16.0, 3.5, 50.0])
内部对象作为java.lang.Object(scala中的AnyRef)返回,而不是作为数组返回

我如何转换它们或访问它们的内容

下面是要测试的代码

 import collection.mutable.{Buffer, ArrayBuffer}
 import javax.swing.table._
 import scala.collection.JavaConversions._

 var data = Array(
             Array("5.0", "1.0", "50.0"),
             Array("10.0", "1.5", "40.0"),
             Array("2.0", "1.5", "90.0"),
             Array("1.0", "1.0", "100.0"),
             Array("6.0", "3.0", "100.0"),
             Array("16.0", "3.5", "50.0"))


 val names = Array("K¹", "K²", "K³")

 val m = new DefaultTableModel(data.asInstanceOf[Array[Array[AnyRef]]], names.asInstanceOf[Array[AnyRef]])

 val t = m.getDataVector.toSeq

这是Java中较旧的接口,因此它返回一个预泛型的
Vector
(即
Vector[\u]
)。有多种方法可以解决这一问题,但其中之一是:

val jv = m.getDataVector.asInstanceOf[java.util.Vector[java.util.Vector[AnyRef]]]
val sv = jv.map(_.toSeq)
首先显式指定返回类型,然后将其转换为Scala集合。如果希望转换为不可变集合,可以

val sv = Vector() ++ jv.map(Vector() ++ _)
除其他外。(这些现在是Scala不可变向量,而不是java.util.vectors。)

如果您想对返回的向量进行变异,只需按原样使用jv,并依靠隐式转换为您完成这项工作


编辑:添加了两种获得不可变集合的其他方法(可能,但我不会说它们更好):


请注意,第二种方法仅在表格非空且为矩形时有效。

非常感谢!你能分享一些其他的方式吗
val sv = List(jv.map(v => List(v: _*)): _*)
val sv = Vector.tabulate(jv.length,jv(0).length)((i,j) => jv(i)(j))