[解決済み] ScalaでJavaのコレクションを反復処理する
2022-05-15 05:33:52
質問
Scalaのコードで
Apache POI
API を使用する Scala コードを書いています。に含まれる行を反復処理したいと思います。
java.util.Iterator
に含まれる行を反復処理したい。このイテレータを
for each
スタイルのループで使用したいので、それをネイティブのScalaコレクションに変換しようとしていますが、うまくいきません。
Scalaのラッパークラス/トレイトを見ましたが、それらを正しく使用する方法がわかりません。Scala で Java コレクションを反復処理する際に、冗長な
while(hasNext()) getNext()
のようなループを使用せずに、ScalaでJavaのコレクションを反復処理するにはどうしたらよいでしょうか?
正解を元に書いたコードがこちらです。
class IteratorWrapper[A](iter:java.util.Iterator[A])
{
def foreach(f: A => Unit): Unit = {
while(iter.hasNext){
f(iter.next)
}
}
}
object SpreadsheetParser extends Application
{
implicit def iteratorToWrapper[T](iter:java.util.Iterator[T]):IteratorWrapper[T] = new IteratorWrapper[T](iter)
override def main(args:Array[String]):Unit =
{
val ios = new FileInputStream("assets/data.xls")
val workbook = new HSSFWorkbook(ios)
var sheet = workbook.getSheetAt(0)
var rows = sheet.rowIterator()
for (val row <- rows){
println(row)
}
}
}
どのように解決するのですか?
ラッパークラス(
scala.collection.jcl.MutableIterator.Wrapper
). そのため、もしあなたが
implicit def javaIteratorToScalaIterator[A](it : java.util.Iterator[A]) = new Wrapper(it)
とすると、Scala のイテレータのサブクラスとして動作するので、次のようなことができます。
foreach
.
関連
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
Junitのユニットテストエラー
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] コレクションを反復処理し、ループ内でオブジェクトを削除する際に ConcurrentModificationException を回避する。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
ajax コミット リソースの読み込みに失敗しました: サーバーはステータス 400 で応答しました ()
-
Junitのユニットテストはjava.lang.Testを報告します。
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
セミコロン期待値エラー解決
-
Java Runtime Environmentを継続するためのメモリが不足しています。
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
アクセス制限の解決方法: ---- in Java
-
htmlとwordの相互変換の実装(画像あり)