use of cyclops.data.tuple.Tuple2 in project cyclops by aol.
the class LazySeqAgronaTest method testZipWithFutures.
@Test
public void testZipWithFutures() {
FutureStream stream = of("a", "b");
FutureStream<Tuple2<Integer, String>> seq = of(1, 2).actOnFutures().zip(stream);
// .map(tuple -> Tuple.tuple(tuple.v1.join(),tuple.v2)).collect(CyclopsCollectors.toList());
List<Tuple2<Integer, String>> result = seq.block();
assertThat(result.size(), is(asList(tuple(1, "a"), tuple(2, "b")).size()));
}
use of cyclops.data.tuple.Tuple2 in project cyclops by aol.
the class SimpleReactStream method duplicate.
/**
* Duplicate a Stream into two equivalent LazyFutureStreams, underlying
* Stream of Futures is duplicated
* <pre>
* {@code
* EagerFutureStream.of(1, 2, 3).duplicate()
*
* results in
*
* tuple((1,2,3),(1,2,3))
* }</pre>
* Care should be taken not to use this method with infinite streams!
*
* @return Two equivalent Streams
*
* @see #duplicate()
*/
default Tuple2<SimpleReactStream<U>, SimpleReactStream<U>> duplicate() {
// unblocking impl
final Stream stream = getLastActive().stream();
final Tuple2<ReactiveSeq<CompletableFuture<U>>, ReactiveSeq<CompletableFuture<U>>> duplicated = ReactiveSeq.fromStream((Stream<CompletableFuture<U>>) stream).duplicate();
final Tuple2 dup = Tuple.tuple(fromStreamOfFutures(duplicated._1()), fromStreamOfFutures(duplicated._2()));
return dup;
}
use of cyclops.data.tuple.Tuple2 in project cyclops by aol.
the class AsyncZippingTest method testUnzip.
@Test
public void testUnzip() {
Supplier<ReactiveSeq<Tuple2<Integer, String>>> s = () -> of(new Tuple2(1, "a"), new Tuple2(2, "b"), new Tuple2(3, "c"));
Tuple2<ReactiveSeq<Integer>, ReactiveSeq<String>> u1 = ReactiveSeq.unzip(s.get());
assertTrue(u1._1().toList().containsAll(Arrays.asList(1, 2, 3)));
assertTrue(u1._2().toList().containsAll(asList("a", "b", "c")));
}
use of cyclops.data.tuple.Tuple2 in project cyclops by aol.
the class AbstractIterableXTest method pairZipWise.
@Test
public void pairZipWise() {
AtomicBoolean data = new AtomicBoolean(false);
AtomicReference<Vector<Tuple2<Integer, String>>> values = new AtomicReference<>(Vector.empty());
AtomicBoolean complete = new AtomicBoolean(false);
AtomicReference<Throwable> error = new AtomicReference<Throwable>(null);
of(1).zip(of("test")).zip(of("test2")).map(t -> Tuple.tuple(t._1()._1(), t._1()._2() + t._2())).forEach(n -> {
data.set(true);
values.updateAndGet(v -> v.plus(n));
}, e -> {
error.set(e);
}, () -> {
complete.set(true);
});
assertTrue(data.get());
assertTrue(complete.get());
assertNull(error.get());
assertThat(values.get(), Matchers.equalTo(Vector.of(Tuple.tuple(1, "testtest2"))));
}
use of cyclops.data.tuple.Tuple2 in project cyclops by aol.
the class EagerFutureStreamFunctions method firstOf.
/**
* Return first Stream out of provided Streams that starts emitted results
*
* @param futureStreams Streams to race
* @return First Stream to skip emitting values
*/
@SafeVarargs
public static <U> SimpleReactStream<U> firstOf(final SimpleReactStream<U>... futureStreams) {
final List<Tuple2<SimpleReactStream<U>, QueueReader>> racers = Stream.of(futureStreams).map(s -> Tuple.tuple(s, new Queue.QueueReader(s.toQueue(), null))).collect(Collectors.toList());
while (true) {
for (final Tuple2<SimpleReactStream<U>, Queue.QueueReader> q : racers) {
if (q._2().notEmpty()) {
EagerFutureStreamFunctions.closeOthers(q._2().getQueue(), racers.stream().map(t -> t._2().getQueue()).collect(Collectors.toList()));
closeOthers(q._1(), racers.stream().map(t -> t._1()).collect(Collectors.toList()));
return q._1().fromStream(q._2().getQueue().stream(q._1().getSubscription()));
}
}
LockSupport.parkNanos(1l);
}
}
Aggregations