2011-03-25 28 views
0

からのJava 2次元ベクトルにアクセスすることはここに私の場合です: 私はgetDataVectorを使用するときだから私は、二次元のjava.util.Vectorを得るのDefaultTableModelScalaの

でテーブルを作成しました。私はtoSeqや他のコンバータを使用する場合

私は、内側のオブジェクトが(ScalaでAnyRef)java.lang.Object上位として返され

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の古いインタフェースであり、それは(すなわちVector[_])プレジェネリックVectorを返し

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 

答えて

1

をテストするためのコードです。そこには、この問題に対処でき、さまざまな方法がありますが、一つは次のとおりです。

val jv = m.getDataVector.asInstanceOf[java.util.Vector[java.util.Vector[AnyRef]]] 
val sv = jv.map(_.toSeq) 

最初に明示的にどのような戻り値の型があるべき指定し、[Scalaのコレクションに変換します。不変のコレクションに変換したい場合は、

val sv = Vector() ++ jv.map(Vector() ++ _) 

などがあります。 (これらは現在、java.util.VectorsではなくScalaの不変ベクトルです)

返されたベクトルを突然変異させたい場合は、そのままjvをそのまま使用し、暗黙の変換を使用して作業を行います。


編集:不変コレクションを取得するにはカップル他の方法を追加(可能性を、私は、彼らが優れているとは言えないでしょう):秒のみ動作することを

val sv = List(jv.map(v => List(v: _*)): _*) 
val sv = Vector.tabulate(jv.length,jv(0).length)((i,j) => jv(i)(j)) 

注テーブルの場合空ではなく長方形です。

+0

ありがとうございます!他にもいくつかのやり方を教えてください – Konstantin