0
0

Java gold 例題 enum ストリームAPI

Last updated at Posted at 2024-08-06

enum Alphabet {
	A, B, C, D;
}

public class EnumTest {
	public static void main(String[] args) {

        String result = Arrays.stream(Alphabet.values())
							  .map(Enum::toString)
							  .collect(Collectors.joining(" - "));
         
		System.out.println(result);
    }
 }

上記のコードの出力結果は?

  1. コンパイルエラー
  2. 実行時エラー
  3. Alphabet
  4. A - B - C - D
  5. ABCD
  6. 何も表示されない

解答

4: A - B - C - D
Alphabet.values()は列挙した値をすべて配列で返す。
Arraysのstream(String[] array)Stream<String>型のStreamを返す。
mapでそれぞれの要素に対して、EnumのtoString()をメソッド参照で呼び出し、適用する
(「e -> e.toString()」でも可)。

toString()は定数の名前をString型で返す。オーバーライド可能。
Enumのname()も同じく定数の名前をString型で返すが、オーバライドできない(final)。

Collectors.joining(CharSequence delimiter)
入力要素を検出順に指定された区切り文字" - "で区切りながら連結するCollectorを返す。
その結果が変数resultに代入される。

補足:

Arrays.stream(String[] array) の使用例

String[] names = {"arres", "barres", "cess"};

List<String> namedList = Arrays.stream(names)
                               .map(n -> n + " - ")
                               .collect(Collectors.toList());

namedList.forEach(System.out::println);

出力

arres - barres - cess - 

このように中間操作のmapを使うと、cess - のように最後の要素にまで" - "が連結される。

String型の配列に区切り文字を入れる場合、Stringクラスのjoinメソッドが利用できる。

String[] names = {"arres", "barres", "cess" };

System.out.println(String.join(" - ", names));

出力

arres - barres - cess

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