[解決済み] Java 8でラムダをパラメータとして受け取るメソッドを定義するにはどうすればよいですか?
2022-03-24 07:12:43
質問
Java 8では、メソッドをLambda式として作成し、参照渡しをすることができます(フードの下に少し細工が必要です)。ラムダを作成してメソッドで使用する例はオンラインにたくさんありますが、ラムダをパラメータとして受け取るメソッドを作成する方法はありません。そのための構文は何ですか?
MyClass.method((a, b) -> a+b);
class MyClass{
//How do I define this method?
static int method(Lambda l){
return l(5, 10);
}
}
解決方法は?
ラムダの受け手は、ラムダが関与していることを知る必要はなく、代わりに適切なメソッドを持つインターフェイスを受け取ります。
言い換えれば、あなたが望むものを正確に受け入れて返す機能的なインターフェース(つまり、単一のメソッドを持つインターフェース)を定義するか使用します。
このため、Java 8 には、よく使われるインターフェイス型のセットが
java.util.function
(おかげさまで
モーリス・ナフタリン
のヒントは、JavaDocについてです。)
この具体的な使用例としては
java.util.function.IntBinaryOperator
と
単一
int applyAsInt(int left, int right)
メソッド
を書くことができます。
method
のようなものです。
static int method(IntBinaryOperator op){
return op.applyAsInt(5, 10);
}
でも、自分でインターフェイスを定義して、こんな風に使うこともできますよ。
public interface TwoArgIntOperator {
public int op(int a, int b);
}
//elsewhere:
static int method(TwoArgIntOperator operator) {
return operator.op(5, 10);
}
そして、ラムダをパラメータとしてメソッドを呼び出します。
public static void main(String[] args) {
TwoArgIntOperator addTwoInts = (a, b) -> a + b;
int result = method(addTwoInts);
System.out.println("Result: " + result);
}
独自のインターフェースを使用することで、より明確に意図を示す名前を付けることができるという利点があります。
関連
-
springboot project MIMEタイプ text/htmlで転送された静的ファイルを読み込む。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み】Java 8 Lambda関数が例外を投げる?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スタイルシートとして解釈されるリソースが、MIMEタイプtext/htmlで転送される。
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
Java のエラーです。未解決のコンパイル問題 解決方法
-
eclipse アクセス制限です。タイプ 'xxx' は API ではありません(必須ライブラリ '' の制限)。
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
javaでクラスを作成すると、enclosing classでないように見える
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
ローカルリソースのロードが許可されていない場合の解決策