Skip to content

Commit 077dfea

Browse files
committed
More emulation
1 parent b780d3f commit 077dfea

File tree

1 file changed

+37
-0
lines changed
  • user/super/com/google/gwt/emul/java/util/stream

1 file changed

+37
-0
lines changed

user/super/com/google/gwt/emul/java/util/stream/Stream.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@
1717

1818
import static javaemul.internal.InternalPreconditions.checkState;
1919

20+
import java.util.ArrayList;
2021
import java.util.Arrays;
2122
import java.util.Collections;
23+
import java.util.List;
2224
import java.util.Comparator;
2325
import java.util.Optional;
2426
import java.util.Spliterator;
@@ -28,8 +30,11 @@
2830
import java.util.function.BiFunction;
2931
import java.util.function.BinaryOperator;
3032
import java.util.function.Consumer;
33+
import java.util.function.DoubleConsumer;
3134
import java.util.function.Function;
35+
import java.util.function.IntConsumer;
3236
import java.util.function.IntFunction;
37+
import java.util.function.LongConsumer;
3338
import java.util.function.Predicate;
3439
import java.util.function.Supplier;
3540
import java.util.function.ToDoubleFunction;
@@ -327,6 +332,38 @@ public boolean tryAdvance(Consumer<? super T> action) {
327332
return StreamSupport.stream(spliterator, false);
328333
}
329334

335+
default public <R> Stream<R> mapMulti(BiConsumer<T, Consumer<? super R>> mapper) {
336+
return flatMap(element -> {
337+
List<R> buffer = new ArrayList<>();
338+
mapper.accept(element, buffer::add);
339+
return buffer.stream();
340+
});
341+
}
342+
343+
default DoubleStream mapMultiToDouble(BiConsumer<? super T, ? super DoubleConsumer> mapper) {
344+
return flatMapToDouble(element -> {
345+
List<Double> buffer = new ArrayList<>();
346+
mapper.accept(element, buffer::add);
347+
return buffer.stream().mapToDouble(n -> n);
348+
});
349+
}
350+
351+
default IntStream mapMultiToInt(BiConsumer<? super T, ? super IntConsumer> mapper) {
352+
return flatMapToInt(element -> {
353+
List<Integer> buffer = new ArrayList<>();
354+
mapper.accept(element, buffer::add);
355+
return buffer.stream().mapToInt(n -> n);
356+
});
357+
}
358+
359+
default LongStream mapMultiToLong(BiConsumer<? super T, ? super LongConsumer> mapper) {
360+
return flatMapToLong(element -> {
361+
List<Long> buffer = new ArrayList<>();
362+
mapper.accept(element, buffer::add);
363+
return buffer.stream().mapToLong(n -> n);
364+
});
365+
}
366+
330367
Object[] toArray();
331368

332369
<A> A[] toArray(IntFunction<A[]> generator);

0 commit comments

Comments
 (0)