0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java】forEachをちょっと理解する【初心者】

Posted at

対象読者

ListやSetの中身を順番に出力する際、以下のように書けることを知っているが、なぜそのように書けるのかが分からないJavaの初心者。

forEach
List<String> list = List.of("a", "b", "c");
list.forEach(a -> System.out.println(a));
// もしくはこう↓
list.forEach(System.out::println);

本記事で少し解消される疑問

Q1.forEachメソッドは何者? 

Q2.forEachはなぜ a -> System.out.println(a) のように書ける?

forEachを理解するための前提知識と回答

forEachについて理解するためには周辺の知識も理解しなければならない。上から順に単語を追って見ていこう。

単語 何?
インターフェース implements(実装)したクラスに抽象メソッドのオーバーライドを強制する
抽象メソッド 具体的な処理の中身を持たないメソッド
関数型インターフェース 抽象メソッドを一つだけ持つインターフェース
forEachメソッド Iterableインターフェース内で定義されている。引数はConsumer<T>型
Tってなに!? Type(型)の意。筆者の独自定義ではなくジェネリクスの型パラメータというものだが、本記事では扱わない
Iterableインターフェース Collectionインターフェース、Mapインターフェースはこれを実装している
Consumerインターフェース void accept(T t)という抽象メソッドを持ち、これは引数を受け取り結果を返さない。A1.forEachメソッドはこのvoid accpet(T t)をオーバーライドしたもの

A2.関数型インターフェースはラムダ式で書けるから。

↑ Q.いやラムダ式って何?
↑ Q.ラムダ式について調べてみたら書き方がだいぶ違うみたいなんだけど?

これらの疑問については既存の記事に詳述されているので以下を参照されたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?