問題タブ [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.

0 投票する
4 に答える
71592 参照

java - Java 8 のスプリッテレータ、コレクタ、およびストリームを理解する

StreamJava 8 のインターフェースを理解するのに苦労してSpliteratorいますCollector。私の問題はSpliteratorCollectorインターフェイスがまだ理解できないことです。その結果、Streamインターフェイスはまだわかりにくいです。

Spliteratoraと a とは正確には何ですか? またCollector、それらをどのように使用できますか? 私が自分自身のSpliterator、またはCollector(そしておそらくStreamその過程で自分自身のものを)書く気があるなら、私は何をすべきで、何をすべきではないのですか?

Web に散らばっているいくつかの例を読みましたが、ここにあるものはすべてまだ新しく、変更される可能性があるため、例とチュートリアルはまだ非常にまばらです。

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

java - 配列から効率的な Java 8 ソートされた Spliterator を作成する

Java 8 では、配列から効率的なスプリッテレータを構築するために、さまざまな便利なユーティリティが提供されています。ただし、コンパレータを使用して Spliterator を構築するためのファクトリ メソッドは提供されていません。明らかに、スプリッテレータにはコンパレータを接続できます。getComparator()メソッドとSORTEDプロパティがあります。

ライブラリの作成者はSORTEDスプリッテレータをどのように構築することになっていますか?

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

java - Iterable で Stream 関数を実行するには?

Java 8 では、Streamクラスに an をラップするメソッドがありませんIterable

代わりに、Spliteratorから を取得してから、次のように から を取得していますIterableStreamStreamSupport

不足しているStream操作を生成する他の方法はありますか?Iterable

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

java - Java 8 の Spliterator の適切なユースケース シナリオは何ですか?

SpliteratorJava 8のクラスの適切なユースケース シナリオは何ですか?

0 投票する
4 に答える
6930 参照

parallel-processing - JPA リポジトリからの Java 8 ストリーム

JPA リポジトリからストリームを作成したいと思います。目標は、レポからのエンティティ (100 万を超える可能性があります) を別のレポに格納される他のエンティティにマッピングすることです。

これまでのところ、指定された数 (たとえば 1000) のエンティティを収集し、それらをターゲット Repo に格納する Collector を作成しました。これは並列ストリームで機能します。私が今必要としているのは、ソース リポジトリからエンティティをフェッチし、必要に応じてそれらをストリームにフィードする良い方法です。

これまでのところ最も有望なのは、生成を介してストリームを構築するためにサプライヤー(http://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html)を実装することでしたが、私は見つけられませんでしたソース Repo へのクエリが別のエンティティを提供しない場合にプロセスを終了する方法。

ポインタはありますか?

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

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 は実装で壊れているのですか :-(。気の利いた新機能かもしれませんが、特にリストのような基本的なもので、既存のコードに重大な変更をもたらすようなことは避けるべきでした/コレクションなど

この苦境に関するヘルプや提案は大歓迎です。

乾杯、

マーク

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

java-8 - Spliterator (Stream Api) で機能しないアスペクト

ロギングの目的で、AspectJ の側面でスプリッテレータを監視しようとしています。しかし、それは不可能のようです。アスペクトが呼び出されることはなく、IntelliJ はアドバイスがメソッドをアドバイスしないことを教えてくれます。AspectJ 1.8.1を使用しています。

SSCCE は github にあります: https://github.com/flaviait/StreamSpliteratorAspectJExample

注釈付きのアスペクトを持つスプリッテレータ:

私の側面:

最後になりましたが、注釈:

私はこれをさまざまなコンテキストで数回実行しましたが、正常に動作します。Java 8 ストリーム API、スプリッテレータ、およびアスペクトに関する既知の問題はありますか? 多分誰かが私を助けることができます。それは素晴らしいことです!

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

java - 値が 1 つしかない場合に値を返す Java 8 Spliterator (または類似のもの)

私はsingleOrEmptyストリームオペレーターの大ファンです。標準ライブラリにはありませんが、非常に便利です。ストリームに値が 1 つしかない場合、その値はOptional. 値がない場合、または複数の値がある場合は、 を返しますOptional.empty()

以前にそれについて質問したところ、@ThomasJungblutがこの素晴らしい実装を思いつきました。

唯一の問題は、通話の最初に配置する必要があることです

最後に順番にではなく

これにより、他のストリーム メカニズムよりも読みにくくなります。

このストリーム処理の初心者として、ストリーム変換のシーケンスの最後singleOrEmptyにショートサーキットメカニズムを配置する方法について何かコツを知っている人はいますか?

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

java - 分割不可能なスプリッテレータ

Spliteratorどのように機能し、スプリッターがどのように設計されているかを理解しようとしています。trySplit()のより重要なメソッドの 1 つである可能性が高いことは認識していますがSpliterator、サードパーティのSpliterator実装を見ると、それらのスプリッテレータが無条件に null を返すことがありますtrySplit()

質問:

  1. Spliterator通常のイテレータと無条件に null を返すa に違いはありますか? そのようなスプリッテレータは、まあ、分割のポイントを打ち負かしているようです。
  2. もちろん、条件付きで null を返すスプリッテレータtrySplit()の正当な使用例はありますが、無条件に null を返すスプリッテレータの正当な使用例はありますか?
0 投票する
2 に答える
1590 参照

java - 不明なサイズの非並列スプリッテレータを実装していますか?

私はすべての私の研究に少し混乱しています。私は TabularResultSet という名前のカスタム インターフェイスを持っています (例のために骨抜きにしました)。これは、本質的に表形式のデータ セットを通過します。イテレータのような next() メソッドがあり、QueryResultSet、クリップボードからのタブ付きテーブル、CSV などをループできます。

ただし、 TabularResultSet をラップして簡単にストリームに変換する Spliterator を作成しようとしています。TabularResultSet が QueryResultSet をトラバースしている可能性があり、同時に next() を呼び出すと大混乱が生じる可能性があるため、並列化する安全な方法を想像できません。並列化を安全に行うことができる唯一の方法は、next() を単一の作業スレッドから呼び出し、データを並列スレッドに渡して処理することです。

したがって、並列化は簡単なオプションではないと思います。これを並列化せずにストリーミングするにはどうすればよいですか? これが私のこれまでの仕事です...