Seq
へのJava
List
から変換するときに、私は実際にこのコードで何が起こっているかのより良い理解を得たい
import scala.collection.JavaConverters._
def foo(javaList: java.util.List[String]): Seq[String] = {
val scalaMutableBuffer: mutable.Buffer[String] = javaList.asScala
scalaMutableBuffer
}
...
val bar = foo(someJavaList)
bar
はSeq[String]
と入力されていますが、Seq操作のパフォーマンスに影響を及ぼす可能性のある可変バッファを使用していることを正しく理解していますか? Seqは単にSeq特性の制約を使ってバッファを参照しているのですか、それとも実際に起こっている実際の変換ですか?値がbar
の場合、変更可能または不変であると考えるのが最善でしょうか?
この質問は、どのようにオープンエンドであったのですか、私は何が起こっているのか良いアイデアがあるとは思わないし、それを変更したいと思います。たとえば、foo
に戻る前にscalaMutableBuffer
toList
に変換することが望ましい場合はありますか?
ありがとうございます!
答えに感謝します。私はScalaの可変性に対して腸管反応を起こしますが、現実的に不変性は、JVMの多くの変更可能性の上にある抽象であり、この場合でもSeqは不変性の抽象化を提供しているようです。 – Nathan
@ネイサン私はあなたの腸の感覚を理解しています。 Scalaを使って作業するときは、永遠に不変性のために努力したいと思っています。しかし、再び、あなたのケースでは 'Seq'抽象化を回避し、実際には変更可能なコレクションの変更可能性を使用するために、一生懸命働かなければならないでしょう。 –
私が 'bar.asInstanceOf [scala.collection.mutable.Buffer [String]]'と呼んだ場合、Seqインターフェースを使ってSeqから可変バッファに一般的な変換を行っていますか?基礎となるバイナリ表現を使った生のキャスト? – Nathan