Genta Hirauchi

公開日:2020/01/25
更新日:2020/03/22

【Kotlin基礎】KotlinでforEachによるループ処理を実装する方法

  • KotlinでforEachの実装方法が知りたい。
  • MapをforEachでループさせたい。
  • Javaで実装した場合との違いが知りたい。

そんな方、いらっしゃいませんか?

本記事では、forEachの実装方法をサンプルコードを交え、わかりやすく解説しております。

本記事を読み終わった後、みなさんがforEachを使用できるようになっていれば幸いです。

目次

KotlinでforEachによるループ処理を実装する方法

forEachとは?

まずはforEachがどういったときに使用される処理なのかを解説致します。

forEachとは、リストや配列を、要素の数だけ順番に繰り返すループ処理のことをいいます。

たとえば、[“犬”, “猫”, “パンダ”]という配列をforEachでループさせると、
1ループ目:”犬”、2ループ目:”猫”、3ループ目:”パンダ”といったように、要素を順番に取得することができます。

forEachの基本的な実装方法

forEachは次のように実装します。

  • Kotlin
List.forEach { element ->
 // elementで明示的に要素を取得
}

List.forEach {
 // itで暗黙的に要素を取得
}

1つ目はラムダ式による実装方法です。
ラムダ式は、(引数) -> { 戻り値 -> 処理 }というように実装する構文です。サンプルでは、変数elementから、リストの要素を順番に参照することができます。

2つ目はラムダ式を省略した実装方法です。
このように戻り値を明示しなかった場合、Kotlinでは、暗黙的に”it”という変数で、リストの要素を参照することができます。

以下は、実際の使用例です。

■ “犬”、”猫”、”パンダ”というStringの配列をforEachでループさせる処理

  • Kotlin
  • Java
val animals = arrayOf("犬", "猫", "パンダ")
animals.forEach { element ->
   println(element)
}

あるいは

animals.forEach {
    println(it)
}
// "犬"、"猫"、"パンダ"
String[] animals = { "犬", "猫", "パンダ" };
for (String animal : animals) {
   System.out.println(animal);
}
// "犬"、"猫"、"パンダ"
Point
  • ラムダ式で実装することで、要素を格納する変数を指定できる
  • ラムダ式を省略すると、要素はitに格納される

【公式ドキュメント】 : forEach – Kotlin Programming Language

MapをforEachでループさせる方法

続いて、MapをforEachでループさせる方法を紹介致します。

MapをforEachでループさせるには、次のように実装します。

  • Kotlin
Map.forEach { (key, value) ->
   // KeyとValueを、任意の変数で取得
}

Map.forEach {
   // Keyはit.key、Valueはit.valueで取得
}

先ほどのListのforEachの時と同様、ラムダ式とラムダ式を省略したものの2通りがあります。

ラムダ式の場合は、MapのKeyとValueを取得する変数を指定することができます。

ラムダ式を省略した場合は、MapのKeyはit.Keyで、MapのValueはit.valueで取得することができます。

では、実装例です。

■ 果物の名前と値段を順番に出力する処理

  • Kotlin
  • Java
val map = mapOf("リンゴ" to 80, "ミカン" to 100, "メロン" to 1000)

map.forEach { (key, value) ->
   println("$key は $value 円です。")
}

あるいは

map.forEach {
   println("${it.key} は ${it.value} 円です。")
}

// リンゴ は 80 円です。
// ミカン は 100 円です。
// メロン は 1000 円です。
Map map = new HashMap<>();
map.put("リンゴ", 80);
map.put("ミカン", 100);
map.put("メロン", 1000);

for(Map.Entry entry : map.entrySet()) {
   System.out.println(entry.getKey() + " は " + entry.getValue().toString() + " 円です。");
}

// リンゴ は 80 円です。
// ミカン は 100 円です。
// メロン は 1000 円です。
Point
  • ラムダ式を使用した場合、KeyとValueを取得する変数を指定できる
  • ラムダ式を省略した場合、Keyはit.key、とValueはit.valueで取得できる

forEach以外のループ処理

for文でのループ処理

for文を使用したループ処理は、次のように実装します。

  • Kotlin
for(変数 in A..B) {
   // ループ処理
}

A..Bの部分には、『0..4』のように、繰り返すレンジを指定します。

変数の部分には、任意の変数を指定します。
変数は、初回の繰り返し時には、レンジで指定した最小の値が格納されており、 繰り返されるたびにインクリメント(1ずつ増加)していきます。

for文についての詳しい解説は、以下の記事にまとめておりますので、詳しく知りたい方は、こちらの記事をご覧いただければと思います。

【Kotlin基礎】Kotlinでfor文によるループ処理を実装する方法

サンプルコードを交えた解説で、for文による基本的なループ処理や、until、step、downToの使い方、ListやMapをループさせる方法を紹介致します。Javaで実装した場合と、Kotlinで実装した場合の両方のコードを載せておりますので、Javaの経験者の方にはより理解しやすい記事となっております。

while、do-whileでのループ処理

while、do-whileを使用したループ処理は、次のように実装します。

  • while
  • do-while
while(条件式) {
   // ループ処理
}
do {
   // ループ処理
} while(条件式)

条件式がtureである限り、ループ処理が実行され続けます。

whileは、条件式の判定が行われた後、ループ処理が実行されます。一方do-whileは、ループ処理が実行された後、条件式の判定が行われます。

while、do-whileについての詳しい解説は、以下の記事にまとめておりますので、詳しく知りたい方は、こちらの記事をご覧いただければと思います。

【Kotlin基礎】Kotlinでwhile、do-whileによるループ処理を実装する方法

本記事では、while、do-whileによるループ処理の実装方法、そして、breakを使用したループ処理から抜け出す方法や、continueを使用したループのスキップ方法を、サンプルコードを交え、解説しております。

まとめ

  • List.forEach{ 変数 -> ループ処理 } でListのループ処理ができ、要素は指定した変数から取得できる
  • List.forEach{ ループ処理 } でListのループ処理ができ、要素は”it”で取得できる
  • Map.forEach{ (キー, 値) -> ループ処理 } でMapのループ処理ができ、
    指定した変数からキーと値が取得できる
  • Map.forEach{ ループ処理 } でMapのループ処理ができ、
    キーは”it.key”、値は”it.value”で取得できる