DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

13章76

このJavaの問題では、Function<String, String> 型の func というラムダ式を定義して、文字列 "hello" を受け取り、結果としてその大文字バージョン "HELLO" を返す必要があります。提供された選択肢から正しいものを選ぶことが求められています。選択肢を確認してみましょう:

  • A: String::toUpperCase(); これは無効なシンタックスです。メソッド参照は正しいクラスまたはオブジェクトに適用されなければなりません。
  • B: x -> x.toUpperCase(); これは有効なラムダ式で、引数 x を受け取り、toUpperCase() メソッドを呼び出して大文字に変換します。
  • C: x::toUpperCase(); これも無効なシンタックスで、メソッド参照の形式が誤っています。
  • D: ::toUpperCase(); これも無効な形式で、オブジェクトやクラスが指定されていません。
  • E: (String x) -> { return x.toUpperCase(); }; これも有効なラムダ式で、引数 x を明示的に型指定しており、toUpperCase() メソッドで大文字に変換し、その結果を返します。

コードに適用すると、以下のようにコメント付きで説明できます:

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        // ここでFunctionインタフェースの実装をラムダ式で定義しています。
        // ラムダ式は引数を一つ受け取り、その引数のtoUpperCaseメソッドを呼び出しています。
        // これにより、引数の文字列が大文字に変換された結果が返されます。
        Function<String, String> func = x -> x.toUpperCase();

        // func.apply("hello")は、"hello"をfuncのラムダ式に渡し、
        // "HELLO"という大文字の文字列を得ることができます。
        System.out.println(func.apply("hello"));
    }
}
Enter fullscreen mode Exit fullscreen mode

このコードでは、funcx -> x.toUpperCase() または (String x) -> { return x.toUpperCase(); } で定義することができ、どちらも "hello""HELLO" に変換します。それが選択肢 B と E が正解とされる理由です。

Top comments (0)