問題タブ [spliterator]
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.
java - Java 8 のスプリッテレータ、コレクタ、およびストリームを理解する
Stream
Java 8 のインターフェースを理解するのに苦労してSpliterator
いますCollector
。私の問題はSpliterator
、Collector
インターフェイスがまだ理解できないことです。その結果、Stream
インターフェイスはまだわかりにくいです。
Spliterator
aと a とは正確には何ですか? またCollector
、それらをどのように使用できますか? 私が自分自身のSpliterator
、またはCollector
(そしておそらくStream
その過程で自分自身のものを)書く気があるなら、私は何をすべきで、何をすべきではないのですか?
Web に散らばっているいくつかの例を読みましたが、ここにあるものはすべてまだ新しく、変更される可能性があるため、例とチュートリアルはまだ非常にまばらです。
java - 配列から効率的な Java 8 ソートされた Spliterator を作成する
Java 8 では、配列から効率的なスプリッテレータを構築するために、さまざまな便利なユーティリティが提供されています。ただし、コンパレータを使用して Spliterator を構築するためのファクトリ メソッドは提供されていません。明らかに、スプリッテレータにはコンパレータを接続できます。getComparator()
メソッドとSORTED
プロパティがあります。
ライブラリの作成者はSORTED
スプリッテレータをどのように構築することになっていますか?
java - Iterable で Stream 関数を実行するには?
Java 8 では、Stream
クラスに an をラップするメソッドがありませんIterable
。
代わりに、Spliterator
から を取得してから、次のように から を取得していますIterable
。Stream
StreamSupport
不足しているStream
操作を生成する他の方法はありますか?Iterable
java - Java 8 の Spliterator の適切なユースケース シナリオは何ですか?
Spliterator
Java 8のクラスの適切なユースケース シナリオは何ですか?
parallel-processing - JPA リポジトリからの Java 8 ストリーム
JPA リポジトリからストリームを作成したいと思います。目標は、レポからのエンティティ (100 万を超える可能性があります) を別のレポに格納される他のエンティティにマッピングすることです。
これまでのところ、指定された数 (たとえば 1000) のエンティティを収集し、それらをターゲット Repo に格納する Collector を作成しました。これは並列ストリームで機能します。私が今必要としているのは、ソース リポジトリからエンティティをフェッチし、必要に応じてそれらをストリームにフィードする良い方法です。
これまでのところ最も有望なのは、生成を介してストリームを構築するためにサプライヤー(http://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html)を実装することでしたが、私は見つけられませんでしたソース Repo へのクエリが別のエンティティを提供しない場合にプロセスを終了する方法。
ポインタはありますか?
interface - Java 8: Spliterator、Iterator、Collection、および Interfaces の「デフォルト」実装 (spliterator という名前の重複メソッド)
Java 1.8.0_25 がリリースされた後、興味深い状況が発生しました... 私の問題の根本は、主にインターフェイス内の「デフォルト」実装の新しい (1.8 への) 機能に関連していると思います。
私が取り組んでいるアプリケーションは現在 1.7 をターゲットにしており、これまではうまく機能していました。ユーザーが 1.8 への更新を開始するまで。ユーザーが 1.8 への更新を開始したので、1.8 サポートへの移行を余儀なくされています。
ほとんどの問題 (主に JavaFX パッケージの 1.7 から 1.8 への変更に関連するもの) は修正されましたが、厄介な問題が 1 つ残っています。
私の知恵、またはその欠如で、私は、しばらく前に、AbstractList<T> から拡張された SortedList<T> を作成することにしました。これまで、このクラスは問題なく動作していましたが、1.8 ランタイムで実行すると、次のようになります。
これは、AbstractList<T> によって実装される一部のインターフェイスの「デフォルト」実装が原因のようです (私の SortedList<T> クラスは、Serializable 以外の追加のインターフェイスを実装していません)。SortedList<T> オブジェクトの逆シリアル化をサポートする必要があるため、Serializable の実装は別の問題です。それを回避する方法はありません!)。
SortedList<T> クラスで spliterator() のオーバーライド実装を提供することで、エラーを取り除くことができます。ただし、これをビルドすると、Java 1.7 環境では動作しなくなります。1.7 ランタイムで SortedList<T> を使用しようとすると、次のようになります。
SortedList<T> の spliterator() メソッドをオーバーライドしたので、このエラーは明らかです。java.util.Spliterator を含める必要がありますが、1.7 には存在しません。
理想的には、お客様が望まない場合は、Java 1.8 への更新を要求しないようにしたいと考えています。
私たちの手はここで強制されていますか?ユーザーに 1.8 への更新を強制し、1.8 に更新したすべてのユーザーに新しいバージョンをロールアウトする必要がありますか?
この問題を回避する方法を知っている人はいますか?
より哲学的な注意として、なぜ Interface は実装で壊れているのですか :-(。気の利いた新機能かもしれませんが、特にリストのような基本的なもので、既存のコードに重大な変更をもたらすようなことは避けるべきでした/コレクションなど
この苦境に関するヘルプや提案は大歓迎です。
乾杯、
マーク
java-8 - Spliterator (Stream Api) で機能しないアスペクト
ロギングの目的で、AspectJ の側面でスプリッテレータを監視しようとしています。しかし、それは不可能のようです。アスペクトが呼び出されることはなく、IntelliJ はアドバイスがメソッドをアドバイスしないことを教えてくれます。AspectJ 1.8.1を使用しています。
SSCCE は github にあります: https://github.com/flaviait/StreamSpliteratorAspectJExample
注釈付きのアスペクトを持つスプリッテレータ:
私の側面:
最後になりましたが、注釈:
私はこれをさまざまなコンテキストで数回実行しましたが、正常に動作します。Java 8 ストリーム API、スプリッテレータ、およびアスペクトに関する既知の問題はありますか? 多分誰かが私を助けることができます。それは素晴らしいことです!
java - 値が 1 つしかない場合に値を返す Java 8 Spliterator (または類似のもの)
私はsingleOrEmpty
ストリームオペレーターの大ファンです。標準ライブラリにはありませんが、非常に便利です。ストリームに値が 1 つしかない場合、その値はOptional
. 値がない場合、または複数の値がある場合は、 を返しますOptional.empty()
。
以前にそれについて質問したところ、@ThomasJungblutがこの素晴らしい実装を思いつきました。
唯一の問題は、通話の最初に配置する必要があることです
最後に順番にではなく
これにより、他のストリーム メカニズムよりも読みにくくなります。
このストリーム処理の初心者として、ストリーム変換のシーケンスの最後singleOrEmpty
にショートサーキットメカニズムを配置する方法について何かコツを知っている人はいますか?
java - 分割不可能なスプリッテレータ
Spliterator
どのように機能し、スプリッターがどのように設計されているかを理解しようとしています。trySplit()
のより重要なメソッドの 1 つである可能性が高いことは認識していますがSpliterator
、サードパーティのSpliterator
実装を見ると、それらのスプリッテレータが無条件に null を返すことがありますtrySplit()
。
質問:
Spliterator
通常のイテレータと無条件に null を返すa に違いはありますか? そのようなスプリッテレータは、まあ、分割のポイントを打ち負かしているようです。- もちろん、条件付きで null を返すスプリッテレータ
trySplit()
の正当な使用例はありますが、無条件に null を返すスプリッテレータの正当な使用例はありますか?
java - 不明なサイズの非並列スプリッテレータを実装していますか?
私はすべての私の研究に少し混乱しています。私は TabularResultSet という名前のカスタム インターフェイスを持っています (例のために骨抜きにしました)。これは、本質的に表形式のデータ セットを通過します。イテレータのような next() メソッドがあり、QueryResultSet、クリップボードからのタブ付きテーブル、CSV などをループできます。
ただし、 TabularResultSet をラップして簡単にストリームに変換する Spliterator を作成しようとしています。TabularResultSet が QueryResultSet をトラバースしている可能性があり、同時に next() を呼び出すと大混乱が生じる可能性があるため、並列化する安全な方法を想像できません。並列化を安全に行うことができる唯一の方法は、next() を単一の作業スレッドから呼び出し、データを並列スレッドに渡して処理することです。
したがって、並列化は簡単なオプションではないと思います。これを並列化せずにストリーミングするにはどうすればよいですか? これが私のこれまでの仕事です...