■ はじめに
https://dk521123.hatenablog.com/entry/2023/03/12/184331
の続き。 Scala で デフォルトでは、break文がないと知ったので ループに関して調べてみた
目次
【1】ループ 1)while文 2)for文 3)foreach文 【2】使用上の注意 【3】トラブル 1)エラー「value foreach is not a member of java.util.List[XXXX]」発生時
【1】ループ
* 注目すべき Java との違いは、for文の構文が変わった
1)while文
* Java と変わらない
2)for文
for(i <- 1 to 3){ println(i) } var array = Array(1, 2, 3) for (x <- array) { println(x) }
注意点:Javaとの違い
// () -> {} でもOK object Hello { def main(args: Array[String]): Unit = { // for { i <- 1 to 3 } for { i <- 1 to 3 } println(s"i = ${i}") } }
for yield
* 以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2023/09/06/232921
3)foreach文
(1 to 3).foreach( i => println(i)) var array = Array(1, 2, 3) (array).foreach( x => println(x))
【2】使用上の注意
* 冒頭でも書いたが、 [1] break文がデフォルトではない => ただし、対応案あり。 [2] continue文もない => 完全にない(実装で工夫するしかない) break / continue については、以下の関連記事で深堀りする
Scala ~ break / continue ~
https://dk521123.hatenablog.com/entry/2023/10/14/011736
[3] Javaコードのコレクション系でのループには 「 import scala.collection.JavaConversions._」が必要である => 詳細は、後述「【3】トラブル」の「1)エラー「・・・」を参照
【3】トラブル
1)エラー「value foreach is not a member of java.util.List[XXXX]」発生時
を参考に Scala コードで書き直していたら、 以下「エラー発生コード」の★の場所で 以下「エラー内容」が表示された
エラー発生コード
// See https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html val listObjResponse = s3Client.listObjectsV2(listObjectsReqManual) // See https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/model/S3Object.html for (content <- listObjResponse.contents()) { // ★ここでエラー★
エラー内容
value foreach is not a member of java.util.List[software.amazon.awssdk.services.s3.model.S3Object]
対応案
コードの冒頭に import scala.collection.JavaConversions._ を付与する
https://github.com/sryza/aas/issues/20
関連記事
Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331
Scala ~ 基本編 / Option型 ~
https://dk521123.hatenablog.com/entry/2023/03/09/000000
Scala ~ 基本編 / メソッド ~
https://dk521123.hatenablog.com/entry/2023/03/03/000000
Scala ~ 基本編 / クラス ~
https://dk521123.hatenablog.com/entry/2023/03/14/000857
Scala ~ 基本編 / コレクション ~
https://dk521123.hatenablog.com/entry/2023/03/13/000345
Scala ~ 基本編 / 日付・日時 ~
https://dk521123.hatenablog.com/entry/2023/03/08/000000
Scala ~ 基本編 / 正規表現 ~
https://dk521123.hatenablog.com/entry/2023/03/18/034704
Scala ~ 基本編 / ジェネリック
https://dk521123.hatenablog.com/entry/2023/03/21/003817
Scala ~ break / continue ~
https://dk521123.hatenablog.com/entry/2023/10/14/011736
Scala ~ for yield ~
https://dk521123.hatenablog.com/entry/2023/09/06/232921
Scala ~ ファイル名・パスの扱い ~
https://dk521123.hatenablog.com/entry/2023/03/11/000000
Scala ~ YAML ~
https://dk521123.hatenablog.com/entry/2023/03/16/012034
Spark/Scalaの開発環境構築 ~ Windows編 ~
https://dk521123.hatenablog.com/entry/2023/03/20/115450
SBT ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/22/000000