問題タブ [functional-java]

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 に答える
256 参照

java-8 - Functionaljava: 任意の型のリストのソート

フィールドを持つ非常に単純な Java BeanWatchedFileがありfileNameます。

fj.data.Listオブジェクトの をソートしたいのですが、リストのメソッドのWatchedFileを定義するのに苦労しています。これは私が思いついたものです:fj.Ordsort()

これは醜いです!オブジェクトをインスタンス化するより良い方法があると確信していOrdます...おそらくJava 8の魔法を利用していますか?

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

functional-java - 既存の注文から注文を作成

がある場合、既存のものを に変換F<A, B>するにはどうすればよいですか?Ord<A>Ord<B>

例えば:

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

java - 列挙からの無限ストリーム

Functional-Java では、以下が無限ストリームを作成することを期待していました。

しかし、完全な列挙を 1 回行うと停止します。javadoc の種類はこれを確認し、列挙が使い果たされるまでしかストリーミングできないと述べています。

では、どうすれば無限ストリームを作成できますか?

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

java - Functional Java: Maven からのインポート

新しいマシンで Maven プロジェクトのクローンを作成しましたが、依存関係が読み込まれていないように見えるため、いくつかの問題が発生しています。そのようなケースの 1 つはfj.Effect、Functional Java です。適切なライブラリを (手動で) 追加しているかどうかわかりません。

コードには、次のものがあります。

追加しようとしましたがorg.org.functionaljava:functionaljava-java8:4.32org.functionaljava:functionaljava:4.3IntelliJ は認識Effectしますが、最初の行をエラーとして強調表示し、次のように言います: 別の行に同様の問題があります:

型 fj.Effect には型パラメーターがありません。

間違ったパッケージをインポートしていませんか?

より一般的には、既存のコードに基づいて、使用すべきパッケージを知る方法はありますか?

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

java - fj.data.Set 比較

では、 メソッドをjava.util使用しcontainsAllて 2 つの を比較できますjava.util.Set。2つを比較する最良の方法は何fj.data.Setですか?

fjoverを使用することの「価値のある」利点は本当にありますjava.utilか?

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

java - Fugue/FunctionalJava を使用して Null とスローから離れますか?

さて、私は長い間 OO 開発者として、この「新しく発見された」関数型プログラミングの世界に入ろうとしています - 少なくとも、これに関係しているので、Java の世界には存在しないようnullにコーディングしようとしています。とモナドをいじるthrowことによって。(少なくとも、それらはモナドだと思います。私はまだその用語と、それを正しく使用しているかどうかに慣れていません...) 私はAtlassian Fugueライブラリから離れます。Functional Javaライブラリーを調べてみましたが、現時点で準備ができているよりもはるかに大きいです。もし fj が私が必要とすることを行い、Fugue がそうでないなら、私はそれで大賛成です。OptionEither

基本的に、私が達成しようとしているのは、このやや醜い Java コードと同等です。

単純に、モナドを使用して、次のEitherようなことができると期待していました。

...ここで、ロジックっぽいメソッドのそれぞれが、適切な例外 (おそらくドメイン固有のエラー クラスですが、今のところ例外は十分に機能します) を左に、Option<something>右に an を含む Each を返します。メソッドはdoSomethingWith...、エラーに対して実行したいロギング/処理を実行します。ロジックっぽいメソッドの例は次のとおりです。

他のメソッドも同様に定義されます。パラメータに を使用しないことが望ましいです。Option前のメソッドが を返した場合、メソッドは単に呼び出されませんOption.none

これを実際にテストすることを妨げたジェネリック型からのコンパイラエラーのラットネストは別として、論理的には、とにかく私が望むことを実際に行うようには見えません-最初の後に基本的に何もしないことを期待していましたEach.left 値が返されましたが、もっとよく見ると、Either.left の結果を次の呼び出しに渡して、さらに続けようとしていると思います。

オプションをwas使用するだけで、目標を達成することができます。

残念ながら、元のブロックと同じロジックを実現するために、ロジック メソッドは次のように実装されます。

.map結果を に持ち上げるので、ここOptionに戻るnullとうまくいきます。残念ながら、私はまだ本質的に呼び出し元からエラー状態を隠しています (さらに悪いことに、エラーを示すために使用しています。これは、 doProcessing が潜在的に有効な理由でnull返されるかどうかについては何も言っていません)。null

したがって、基本的に、以前の getMessage の例に沿ったメソッド シグネチャが必要です。

戻り値を見て、「このメソッドは失敗するか、あるかもしれないし、ないかもしれない何かを返すだろう」と一目でわかるという考えが好きです。ただし、私は FP に慣れていないため、どうすればよいかわかりません。

そして、私の理解では(おそらく欠陥がありますが)、次のようなことができるということです

(おそらく異なる方法で)それは

  1. Each.left が処理された後はいつでも処理を停止します (つまり、適切なdoSomethingWithXExceptionメソッドを呼び出して停止します) 。
  2. チェーン全体を続行します。
  3. doSomethingWithAwesomeStuffExceptionへの呼び出しが失敗した場合にのみ呼び出しawesomeStuffます。他のメソッドが失敗した場合は、それに到達しません。

私がやろうとしていることは合理的ですか?つまり、何らかの方法で可能だと確信していますが、これらのライブラリ (または私が知らない他のライブラリ) のいずれかを使用しても、これを Java 構文に押し込むのは複雑すぎますか?

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

java - Java のさまざまな Optional/Option セマンティクス

Java エコシステムでおそらく最も使用されている 3 つの実装 (Java 8、Functional Java、および Guava) で、さまざまな Option/Optional セマンティクスの背後にある理由を理解しようとしています。

次の 3 つのスニペットを検討します。

  1. java.util.Optional.of(100).map(i -> null)になりますOptional.empty
  2. fj.data.Option.some(100).map(i -> null)になりますSome(null)
  3. com.google.common.base.Optional.of(100).transform(i -> null)結果NullPointerException

3つの選択の背後にある理由は何ですか? 該当する場合、関数型プログラミングの観点から最も「純粋」または「正しい」と考えられるものは何ですか? たとえば、Option型をモナドと見なすという点では、何が最も正しいでしょうか。または、最も構成可能と見なすことができるものは何ですか? null を許可する関数型言語でこれがどのように処理されるかを知ることも興味深いでしょう。