今回は、ラムダ式を使用したプログラムに関する問題です。
目次
問題
次のラムダ式を使ったプログラムを実行した場合の出力を選択肢から選んでください。
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
public class LambdaExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("10", "20", "30");
Function<String, Integer> converter = s -> Integer.parseInt(s) * 2;
list.stream().map(converter).forEach(System.out::println);
}
}
選択肢
- A. 10 20 30
- B. 20 40 60
- C. 102030
- D. 実行時エラーが発生する
答えと解説
回答を見る
答え
B. 20 40 60
解説
解説のポイント:
- ラムダ式の基礎
- ストリームAPIの操作
1. 基本説明: このプログラムでは、ラムダ式とストリームAPIを使って文字列リストを整数に変換し、その後に整数を2倍にします。
リストには文字列「10」、「20」、「30」が含まれており、それを整数にパース(変換)してから2倍します。そして変換された結果をプリントしています。
2. 誤答理由: Aの「10 20 30」は元の文字列をそのまま出力していることを示す選択肢ですが、これは正しくありません。プログラムはラムダ式で数値を操作しています。
Cの「102030」はリストの結合時のものかもしれませんが、ここではリストの操作が数値に限定され、かつ変換しているため不正解です。
Dの「実行時エラー」は問題ありません。コードは正しく動作しますので不正解です。
3. つまずきポイント: 初心者が混乱しがちなのは、ラムダ式とストリーム操作の組み合わせです。
関数型インターフェースであるFunction<String, Integer>
を用いて、文字列を数値に変換し、さらにその数値を操作する部分が重要です。
ストリームAPIのmap
メソッドは、各要素を新たな形に変換する点を押さえましょう。
4. 発展知識: ラムダ式は匿名関数とも呼ばれ、関数プログラミングパラダイムの一部です。
通常のメソッドよりも短くかけ(インラインで実装でき)、Java 8以降で導入された機能で、これによりコードが簡潔になります。
さらに、この例では、メソッド参照::
を用いてSystem.out
のprintln
メソッドを使った出力が行われています。