@Override public final <R> ReactiveSeq<R> flatMap(final Function<? super T, ? extends Stream<? extends R>> fn) { if(this.stream instanceof FunctionSpliterator){ FunctionSpliterator f = (FunctionSpliterator)stream; return createSeq(StreamFlatMappingSpliterator.compose(f,fn),reversible); } return createSeq(new StreamFlatMappingSpliterator<>(get(),fn), Optional.empty()); }
@Override public Spliterator<R> copy() { return new StreamFlatMappingSpliterator<>(CopyableSpliterator.copy(source),mapper); } }
@Test public void tryAdvance() throws Exception { StreamFlatMappingSpliterator<String, String> split = new StreamFlatMappingSpliterator<>(new DummySpliterator<String>(-1l, 1), s -> Stream.of(s)); boolean called[] = {false}; split.tryAdvance(e->called[0]=true); assertTrue(called[0]); called[0] = false; split.tryAdvance(e->called[0]=true); assertTrue(called[0]); called[0] = false; split.tryAdvance(e->called[0]=true); assertTrue(called[0]); called[0] = false; split.tryAdvance(e->called[0]=true); assertTrue(called[0]); }
public static <T2,T,R> StreamFlatMappingSpliterator<T2,R> compose(FunctionSpliterator<T2,T> fnS,Function<? super T, ? extends Stream<? extends R>> mapper){ Function<? super T2,? extends T> fn = fnS.function(); return new StreamFlatMappingSpliterator<T2,R>(CopyableSpliterator.copy(fnS.source()),mapper.<T2>compose(fn)); } @Override
@Override public final <R> ReactiveSeq<R> flatMap(final Function<? super T, ? extends Stream<? extends R>> fn) { if(this.stream instanceof FunctionSpliterator){ FunctionSpliterator f = (FunctionSpliterator)stream; return createSeq(StreamFlatMappingSpliterator.compose(f,fn),reversible); } return createSeq(new StreamFlatMappingSpliterator<>(get(),fn), Optional.empty()); }
@Override public Spliterator<R> copy() { return new StreamFlatMappingSpliterator<>(CopyableSpliterator.copy(source),mapper); } }
public static <T2,T,R> StreamFlatMappingSpliterator<T2,R> compose(FunctionSpliterator<T2,T> fnS,Function<? super T, ? extends Stream<? extends R>> mapper){ Function<? super T2,? extends T> fn = fnS.function(); return new StreamFlatMappingSpliterator<T2,R>(CopyableSpliterator.copy(fnS.source()),mapper.<T2>compose(fn)); } @Override