【Java入門】Java8のforEachとラムダ式を配列、List、Mapで使う

こんにちは!エンジニアの中沢です。

Javaにはループ処理を行うfor文や拡張for文(for-each文)がありますが、Java8でさらに便利なforEachメソッドが追加されました。

この記事では、

  • forEachメソッドとは
  • forEachメソッドと拡張for文(for-each文)の違い
  • forEachメソッドを配列、List、Mapで使う方法
  • forEachメソッドでインデックス番号を取得する方法
  • メソッド参照を使ってさらに省略する方法
  • Java8のラムダ式やStream APIとは

などの基本的な内容から、応用的な内容についても解説していきます。今回はこれらの方法を覚えるために、forEachメソッドのさまざまな使い方を初心者向けにわかりやすく解説します!

forEachメソッドとは

初めにforEachメソッドについて解説します。Javaのループ処理にはfor文、拡張for文(for-each文)などがありましたが、Java8でforEachメソッドが追加されました。forEachメソッドはfor文と同様に配列、List、Mapなどに対して繰り返し処理を行うときに使います。

forEachメソッドは拡張for文(for-each文)よりもさらに簡潔にコードを書けるので、ぜひ覚えてください!

拡張for文(for-each文)との違いを比較

ここでは拡張for文(for-each文)forEachメソッドの違いを解説します。同じ動作をする拡張for文とforEachメソッドを比較して文法を確認してみましょう。

forEachメソッドはラムダ式と合わせて使うのでラムダ式の使い方を覚える必要がありますが、単純なループ処理ならここで解説したコードを覚えておけば大丈夫です。

forEachメソッドとラムダ式を使った場合は、型を書く必要がなくなるので簡潔にコードを書くことができます。forEachメソッドに出てくる「->」はラムダ式の文法です。ラムダ式についての詳細を確認したいときはこちらの記事を確認してください。

【Java入門】Java8のラムダ式の使い方とメリットとは(Stream API)
更新日 : 2018年10月29日

forEachメソッドの使い方

ListでforEachメソッドを使う方法

ここではListのループ処理でforEachメソッドを使う方法を解説します。Listのすべての要素を取得する方法を、拡張for文とforEachメソッドを比較したサンプルコードで確認してみましょう。

[実行結果]

forEachメソッドを使って、拡張for文と同じようにListのすべての要素を表示することができました!

配列でforEachメソッドを使う方法

ここでは配列でforEachメソッドを使う方法を解説します。配列でforEachメソッドを使う場合は”Stream API”を使う必要があります。“Stream API”を使うには次のように記述します。

forEachメソッドで配列のすべての要素を表示する方法を次のサンプルコードで確認してみましょう。

[実行結果]

forEachメソッドと”Stream API”で配列のすべての要素を表示することができました!

MapでforEachメソッドを使う方法

ここではMapのキー(key)と値(value)をforEachメソッドで取得する方法を解説します。forEachメソッドを使えばMapのループ処理も簡単に行えます。forEachメソッドでMapのキー(key)と値(value)を表示する方法を次のサンプルコードで確認してみましょう。

[実行結果]

forEachメソッドでMapのキー(key)と値(value)を表示することができました!このサンプルコードのように、MapでforEachを使う場合は、第1引数がキー(key)、第2引数が値(value)になります。注意点として、ここではHashMapを使っているためキー(key)の順番は保持されていません。

インデックス番号を取得する方法

forEachメソッドではループカウンタがないため、for文のようにインデックス番号を取得することができません。そのため、indexOfメソッドを使って要素のインデックス番号を取得する方法とループカウンタとして使う変数をループの外に用意して対応する方法を解説します。

indexOfメソッドを使う方法

ここではindexOfメソッドを使って要素のインデックス番号を取得する方法を解説します。indexOfメソッドは引数の値と同じ要素のインデックス番号を返すので、これを使ってインデックス番号を取得することができます。

ただし、indexOfメソッドでは同じ要素が複数含まれる場合は初めのインデックス番号が表示されるので注意してください。次のサンプルコードでindexOfメソッドを使う方法を確認してみましょう。

[実行結果] indexOfメソッドを使ってインデックス番号と要素を取得することができました!

ループカウンタとして使う変数をループの外に用意する

ここではループカウンタとして使う変数をループの外に用意する方法を解説します。ラムダ式のループの中からは、外側で宣言した変数に値に代入することができませんが、配列にした場合は値を変更することができます。

次のサンプルコードでループカウンタとして使う変数をループの外に用意する方法を確認してみましょう。

[実行結果]

ループカウンタとして使う変数をループの外に用意して、インデックス番号と要素を取得することができました!

メソッド参照を使ってラムダ式を省略する方法

ここではメソッド参照を使ってラムダ式を省略する方法を解説します。メソッド参照はラムダ式と同様に、Java8で追加された機能です。次のサンプルコードでメソッド参照を使ってラムダ式を省略する方法を確認してみましょう。

[実行結果]

今までに解説したforEachメソッドとラムダ式を使った方法と同じように、メソッド参照を使ってListの要素を表示することができました!メソッド参照の詳細についてはこちらの記事で解説しているので、ぜひ確認してください!

【楽チンJava】メソッド参照での呼び出し方
更新日 : 2017年7月27日

Java8のラムダ式やStream APIについての解説

Java8で追加されたラムダ式やstream APIについて詳しく知りたいときはこちらの記事を確認してください!

Java8の新機能を徹底解説!(ラムダ式、Streamなど)
更新日 : 2017年12月20日

for文の使い方総まとめ

for文の使い方について詳しく知りたいときはこちらの記事を確認してください!

拡張for文(for-each文)の使い方総まとめ

拡張for文(for-each文)の使い方について詳しく知りたいときはこちらの記事を確認してください!

【Java入門】拡張for文とJava8のforEachの使い方総まとめ
更新日 : 2019年6月6日

まとめ

いかがでしたか?今回はJava8で追加されたforEachメソッドの使い方について解説しました。forEachメソッドは拡張for文よりも簡潔にコードを書けるのでぜひ活用してくださいね。

もしforEachメソッドの使い方を忘れてしまったらこの記事を確認してください!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

中沢 丈

中沢 丈

フリーランスエンジニア。
システム開発からコンテンツ作成まで幅広く対応します。

連絡先はこちらです。
[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説