2017-04-16 3 views
0

Rubyでは、Enumerableモジュールを独自のカスタムコレクションクラスに混ぜると、eachメソッドを実装すればよく、すべてのメソッドはEnumerablemapselectreduceなど)が自分のクラスで使用できるようになります。Ruby EnumerableのようにJavaでカスタムStreamクラスを簡単に作る方法

Java 8では、クラスライブラリには継承できるインターフェイスまたは抽象クラスがあります。したがって、独自のStreamクラスを作成する単一のメソッドをオーバーライドするだけで済みます。 Stream<T>.generateまたはStream.Builder<T>を使用してStream<T>インスタンスを生成することができましたが、多くの作業をすることなくカスタムStreamクラスを作成できるようにしたいと考えています。

+0

'Stream'はすでにインターフェイスです。そのインターフェイスを実装するクラスを作成できます。私はあなたの混乱が何であるかについて少し不明です。あなたはあなたが望む任意の方法でそのインタフェースを実装することができます。 Rubyのようになることは決してありません。なぜなら、Rubyのミックスイン/モジュールについての方法は、インターフェースとは異なるからです。 – Makoto

+0

私が気にしていたのは、 'Stream'を実装している抽象クラスでした。独自のカスタム' Stream'クラスを作るために(Rubyの 'each'のような)単一のメソッドをオーバーライドする必要があるかもしれません。しかし、それはストリームライブラリがサポートするように設計されているパターンには見えません。コメントありがとう。 –

答えて

1

私は継承がアプローチではないと思いますStreamはJava用に設計されています。だから、むしろSpliteratorインターフェイスを実装して、このようなSpliterator介して提示あなたのデータに対してストリームを作成し、

StreamSupport.stream(data, parallel); 

あなたはコピーせずにストリームとしてデータのかなり具体的な形態を提供することができますこの方法を経由して、あなたのストリームを構築するだろうあなたが言及した方法で必要なときにすべてのデータをストリームに追加します。しかし、あなたが本当にいくつかのストリームの動作を上書きする必要がある場合は、かなり奇妙になる。だからうまくいけば、実際にはあなたが必要なものではありません。

関連する問題