[解決済み】ScalaのJavaConvertersとJavaConversionsの違いは何ですか?
質問
で
scala.collection
という2つの非常によく似たオブジェクトがあります。
JavaConversions
と
JavaConverters
.
- この2つのオブジェクトの違いは何ですか?
- なぜ両方が存在するのか?
- どのような場合に、一方と他方を使い分けたいのか?
どのように解決するのですか?
EDITです。
Java Conversions
ゲット
@deprecated
をScala 2.13.0に追加しました。使用方法
scala.jdk.CollectionConverters
代わりに
JavaConversions
は、Javaコレクションと最も近い対応するScalaコレクションの間で変換を行う一連の暗黙のメソッドを提供します。これは,Scalaインタフェースを実装して呼び出しを基礎となるJavaコレクションに転送するラッパー,またはJavaインタフェースを実装して呼び出しを基礎となるScalaコレクションに転送するラッパーのどちらかを作成することによって行われます.
JavaConverters
は pimp-my-library パターンを使って
asScala
メソッドをJavaのコレクションに追加し
asJava
メソッドでScalaのコレクションにアクセスし、上で説明した適切なラッパーを返します。バージョン 2.8.1 以降は
JavaConversions
(2.8以降)で、ScalaとJavaのコレクション間の変換を明示的に行うことができます。Davidが回答で書いていることとは逆に、私は、ScalaとJavaのコレクション間の変換を明示的に行うために
JavaConverters
というのも、暗黙の変換を大量に行うようなコードを書く可能性を大幅に減らすことができるからです。
.asScala
または
.asJava
.
ここでは、その変換メソッドとして
JavaConverters
が提供する。
Pimped Type | Conversion Method | Returned Type
=================================================================================================
scala.collection.Iterator | asJava | java.util.Iterator
scala.collection.Iterator | asJavaEnumeration | java.util.Enumeration
scala.collection.Iterable | asJava | java.lang.Iterable
scala.collection.Iterable | asJavaCollection | java.util.Collection
scala.collection.mutable.Buffer | asJava | java.util.List
scala.collection.mutable.Seq | asJava | java.util.List
scala.collection.Seq | asJava | java.util.List
scala.collection.mutable.Set | asJava | java.util.Set
scala.collection.Set | asJava | java.util.Set
scala.collection.mutable.Map | asJava | java.util.Map
scala.collection.Map | asJava | java.util.Map
scala.collection.mutable.Map | asJavaDictionary | java.util.Dictionary
scala.collection.mutable.ConcurrentMap | asJavaConcurrentMap | java.util.concurrent.ConcurrentMap
—————————————————————————————————————————————————————————————————————————————————————————————————
java.util.Iterator | asScala | scala.collection.Iterator
java.util.Enumeration | asScala | scala.collection.Iterator
java.lang.Iterable | asScala | scala.collection.Iterable
java.util.Collection | asScala | scala.collection.Iterable
java.util.List | asScala | scala.collection.mutable.Buffer
java.util.Set | asScala | scala.collection.mutable.Set
java.util.Map | asScala | scala.collection.mutable.Map
java.util.concurrent.ConcurrentMap | asScala | scala.collection.mutable.ConcurrentMap
java.util.Dictionary | asScala | scala.collection.mutable.Map
java.util.Properties | asScala | scala.collection.mutable.Map[String, String]
しかし、Javaから直接変換を使用するには、以下のメソッドを呼び出す方がよいでしょう。
JavaConversions
を直接使用する;例えば
List<String> javaList = new ArrayList<String>(Arrays.asList("a", "b", "c"));
System.out.println(javaList); // [a, b, c]
Buffer<String> scalaBuffer = JavaConversions.asScalaBuffer(javaList);
System.out.println(scalaBuffer); // Buffer(a, b, c)
List<String> javaListAgain = JavaConversions.bufferAsJavaList(scalaBuffer);
System.out.println(javaList == javaListAgain); // true
関連
-
[解決済み] ScalaのSeqとListの違いについて
-
[解決済み] MapのmapValuesとtransformの違いについて
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】Scalaにおける中括弧と括弧の正式な違い、また、どのような場合に使用すべきなのか?
-
[解決済み】Scalaのvarとvalの定義の違いは何ですか?
-
[解決済み】関数を定義する "def "と "val "の違いとは?
-
[解決済み】ScalaのfoldLeftとreduceLeftの違いについて
-
[解決済み] Scalaの==と.equalsの違いは何ですか?
-
[解決済み】Scalaのimplicitを理解する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Sparkです。CoarseGrainedSchedulerが見つかりませんでした。
-
[解決済み] NoClassDefFoundError: org/apache/hadoop/fs/StreamCapabilities (s3データをsparkで読み込む際に発生します。
-
[解決済み] 理解する `andThen`
-
[解決済み] sparkでrddオブジェクトをdataframeに変換する方法
-
[解決済み】case objectとobjectの違いについて
-
[解決済み】Scalaでリスト内のアイテムを取得する?
-
[解決済み】Scalaのコンテキストとビューバウンドとは何ですか?
-
[解決済み] 縮小、折りたたみ、スキャン(左/右)?
-
[解決済み] 2つのマップをマージし、同じキーの値を合計するための最良の方法?
-
[解決済み] Scala:1ステートメントで文字列をファイルに書き込む