今日もJava Silver試験に向けて、一緒に練習問題を解いていきましょう。
問題
次のJavaプログラムが正しく動作するためには、どの選択肢が必要でしょうか?
import java.util.function.Function;
public class LambdaExample {
public static void main(String[] args) {
Function<String, Integer> func = str -> // ここにコードを追加;
System.out.println(func.apply("123"));
}
}
選択肢
- A. Integer.valueOf(str)
- B. Integer.parseInt(str)
- C. str.length()
- D. str.compareTo("100")
答えと解説
回答を見る
答え
B. Integer.parseInt(str)
解説
基本説明:
ラムダ式はJava 8で導入された、新たなメソッド定義の方法です。Function<T, R>
インタフェースは、入力を受け取り、結果を返す関数を表現します。
今回使用するラムダ式はFunction<String, Integer>
型で、文字列を整数に変換することを目的としています。
このため、Integer.parseInt(str)
を使うと、文字列が整数にパース(解析)され、期待する処理が行われることになります。
誤答理由:
他の選択肢A、C、Dは文字列を整数に変換する方法としては不適切です。
A. Integer.valueOf(str)
は実際には文字列を変換できますが、parseInt
がより適切です。
CとDは別の処理に用います。例えば、str.length()
は文字列の長さを返し、str.compareTo("100")
は文字列の比較になります。
つまずきポイント:
ラムダ式やメソッド参照に不慣れな場合、何をreturnすべきか迷うことがあります。
Functionインタフェースは2つの型パラメータを受け取りますが、時にそれが混乱の元になってしまいます。
「このメソッドは何をするのか?」をまず考え、それに対応するメソッドや実装形式を選択することが重要です。
発展知識:
Javaのラムダ式は、インタフェースが持つ1つの抽象メソッドを実装するために使用されます。
代表的な拡張にPredicate
やConsumer
、Supplier
などがあります。
ラムダ式を定義することで、これらの機能に対してオンザフライで実装を行うことができ、コードの可読性や短縮化に寄与します。