問題タブ [functional-interface]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
184 参照

java - パラメータなしで関数型インターフェースを検索し、ブール値を返します

notCallable<Boolean>を返し、例外をスローしない に近いものはありますか?booleanBoolean

みたいに使いたいDoIt.until( ()-> someQueryWithBooleanResult() );

はい、多少似ていることは知っPredicate<Void>ていますが、仮引数を使用したくありません。

0 投票する
1 に答える
56705 参照

java - パラメータでメソッド参照を使用する

Javaストリームの学習を始めたばかりで、問題に直面しました。次の例を見てください。これは Node クラスの一部です:

私の意図は、ストリーム内の各ノードで名前と結果のパラメーターを使用して #findChildren を呼び出すことでした。メソッド参照 Node::findChildren を使用しようとしましたが、うまくいきませんでした。->演算子を使用する以外のソリューションをいただければ幸いです。

メソッド参照をパラメーターと一緒に使用することは何とか可能ですか? 私はストリームのアイデアが好きで、コードをもっと読みやすくしたいだけです。

実際、私が読んだパラメーターを使用したメソッド参照という同様の質問があると思いますが、コードで bind2 メソッドを使用する方法がわかりません。それが唯一の解決策ですか?

0 投票する
0 に答える
106 参照

java - Java 8ラムダでFunctionalInterfaceメソッド情報を取得する方法

2 つのラムダ メソッドが等しいかどうかをテストしたい。例えば:

出力:


私の目的は、2 つのラムダ関数が同じメソッドであることを検証することです。

つまり、true を返すテストがあります。

このようにして、FunctionalInterface からメソッド情報を取得できますか?

ありがとう

0 投票する
2 に答える
229 参照

java - Generic FunctionalInterface と Method Reference が Type Erasure によって台無しにされる

次の汎用 FunctionalInterface があります。

そして、この ArrayList の子孫:

ここで、メソッド参照と型消去を使用して次のコードを記述します。

これは私を困惑させます。this::doFoo を FooInterface 変数に割り当て、コードの最初の部分で List.add() を呼び出しても、ArrayList から派生したクラスから同じ add() メソッドを呼び出すことを拒否するだけで、コンパイラが問題ないのはなぜですか。 ?

私の子孫クラスの型消去で何かおかしなことが起こっているようですが、何ですか? これはバグですか?サポートされていないことをしましたか?

0 投票する
1 に答える
1401 参照

java - Java の関数型インターフェイスのインスタンスの等価性

機能インターフェースの同等性/不変性についてどのように確信できるかわかりません。Java 8 でこの構文糖衣を使用すると、等価性を保証する方法がないのではないかと思います。何かヒントがあれば教えてください。

質問の短いコード スニペットを作成しました。

そして、機能的な方法でこのインターフェースのインスタンスを追加しようとしました

true が出力されます。これは、等価チェックがなかったことを意味し、一度追加すると Set からインスタンスを削除することもできません。

関数型インターフェースを引数として使用する場合、それらのインスタンスを何らかの方法で比較できる方法はありますか?

事前に感謝します。

0 投票する
1 に答える
921 参照

java - カスタム機能インターフェースでストリームを使用する

この Oracle Web サイトでストリームを調べ始めたところです。以下のようなコードを見てすぐに思いついた質問の 1 つは、フィルター ロジックを再利用したい場合 (たとえば、Person で "isAdult" メソッドを使用する場合) です。

これは、パラメーター Person を受け入れないため、ストリームではメソッド参照として機能しません。同様に、パラメーター化可能な「isOlderThan」ロジックを作成するために、年齢を含む追加の int パラメーターを受け入れるフィルターを作成することはできません。

カスタム機能インターフェースと組み合わせてストリームを使用する方法が見つかりませんでした。そのような行動をどのようにモデル化しますか? 上記のシナリオで静的な「isAdult」メソッドを作成することはあまりクリーンなソリューションではなく、そのようなメソッドで「PersonChecker」オブジェクトを作成することもないように感じます。

ありがとうございました

0 投票する
3 に答える
6510 参照

lambda - how to pass lambda expression with arguments as parameters in Java 8?

Here is what I tried. and it does not even compile.

Couple of things I am trying to acheive/learn here is:

1) how to pass lambda expression as method parameter ( in main method above)

2) how to pass parameters to the function (in handleOpertion method, there is compilation error that apply takes only one parameter)

0 投票する
1 に答える
5788 参照

java - 機能的インターフェースの継承の癖

私はしばらくの間、次のようなカスタム インターフェイスを使用してきました。

Functionこのインターフェースを Javaと Guava の両方で改造したいのですFunctionが、FunctionalInterface. 私は完璧な配置を持っていると思いました:

両方のスーパーインターフェースが同じapply()メソッドを宣言します。これは私のインターフェースに実装されており、抽象call()メソッドだけが残されています。奇妙なことに、それはコンパイルされません。

「@FunctionalInterface」注釈が無効です。Function<T,R> は関数型インターフェースではありません

さらに奇妙なことに、次のバリエーションは問題なくコンパイルされます。

最初のバージョンがコンパイルされない理由はありますか?

0 投票する
2 に答える
6436 参照

java - Java 8 関数呼び出し

私はここ数か月からJava 8を使用しており、ラムダについて頭を悩ませようとしています。コンサートについてはかなり理解しています。しかし、ラムダ呼び出しとしてのカスタム機能インターフェイスの実行に苦労しています。

Java Bifuctional インターフェイス実装を作成する場合

以下のようにラムダと呼ぶことはできますか?

または、execute メソッドを作成する必要がありますか?

ラムダを呼び出すコードの例を次に示します。

なぜコンパイラがこれを理解できないのか不思議です