私はすべての私の研究に少し混乱しています。私は TabularResultSet という名前のカスタム インターフェイスを持っています (例のために骨抜きにしました)。これは、本質的に表形式のデータ セットを通過します。イテレータのような next() メソッドがあり、QueryResultSet、クリップボードからのタブ付きテーブル、CSV などをループできます。
ただし、 TabularResultSet をラップして簡単にストリームに変換する Spliterator を作成しようとしています。TabularResultSet が QueryResultSet をトラバースしている可能性があり、同時に next() を呼び出すと大混乱が生じる可能性があるため、並列化する安全な方法を想像できません。並列化を安全に行うことができる唯一の方法は、next() を単一の作業スレッドから呼び出し、データを並列スレッドに渡して処理することです。
したがって、並列化は簡単なオプションではないと思います。これを並列化せずにストリーミングするにはどうすればよいですか? これが私のこれまでの仕事です...
public final class SpliteratorTest {
    public static void main(String[] args) {
       TabularResultSet rs = null; /* instantiate an implementation; */
       Stream<TabularResultSet> rsStream = StreamSupport.stream(new TabularSpliterator(rs), false);
    }
    public static interface TabularResultSet {
        public boolean next();
        public List<Object> getData();
    }
    private static final class TabularSpliterator implements Spliterator<TabularResultSet> {
        private final TabularResultSet rs;
        public TabularSpliterator(TabularResultSet rs) {
            this.rs = rs;
        }
        @Override
        public boolean tryAdvance(Consumer<? super TabularResultSet> action) {
            action.accept(rs);
            return rs.next();
        }
        @Override
        public Spliterator<TabularResultSet> trySplit() {
            return null;
        }
        @Override
        public long estimateSize() {
            return Long.MAX_VALUE;
        }
        @Override
        public int characteristics() {
            return 0;
        }
    }
}