Stream インタフェースを実装して Either を作る
java で開発していると、 Either クラス がほしくなることがあります。(Scala だったらな。。。と思ってしまいます)
関数型ライブラリ http://www.functionaljava.org/ や http://www.javaslang.io/ などを採用すれば、 Either クラスが実装されているのですが、 これらのライブラリを使うと、
java 標準の List 、 Set 、Stream 、Optional を捨てる覚悟がいります。
家で趣味で作る分ならともかく、仕事で参加メンバー全員にこれを強いるのはなかなか勇気がいります。
そこで、java.util.stream.Stream インタフェースを実装した Either クラスを作ることを思いつきました。
Stream は java8の標準ライブラリなので、java の List 、Stream 、Optional は問題なく使えそうです。 そして、 Either も使える。
うまくいきそうな気がします。。。
実装したクラスの配置場所
クラス設計の方針
以下、簡単ですが一応説明します
-
抽象クラス Either 、具象クラス Either.Left 、 Either.Right を作る。
-
Either.Left が異常系で使用する値クラス。 Either.Right が、正常系に使用する想定の値クラス。
-
Either.Left は、Stream#empty() と同じようなふるまいをする。
-
Either.Right は Stream#of(value) と同じようなふるまいをする。
これから、使ってみようかなと思います。使いやすいのか否かはこれから評価します。
- Optional も Stream インタフェースを実装した Option とか作れば、不満 も解消するかも。
[…] Stream インタフェースを実装して Either を作る と同じようなことをすれば、Optional よりましなものになるかも。 ただ、java8 の標準の Optional があるのに、わざわざ新しく作った Optional を使うほうが使いやすくなるのかという疑問はあります。 […]