
net.pincette.rs.Concat Maven / Gradle / Ivy
package net.pincette.rs;
import static java.util.Arrays.asList;
import static net.pincette.rs.Chain.with;
import java.util.List;
import java.util.concurrent.Flow.Publisher;
import java.util.concurrent.Flow.Subscriber;
/**
* Concatenates multiple publishers of the same type to form one publisher that completes when the
* last given publisher completes.
*
* @param the value type.
* @author Werner Donné
* @since 3.0
*/
public class Concat implements Publisher {
private final List> publishers;
public Concat(final List> publishers) {
this.publishers = publishers;
}
public static Publisher of(final List> publishers) {
return new Concat<>(publishers);
}
@SafeVarargs
public static Publisher of(final Publisher... publishers) {
return new Concat<>(asList(publishers));
}
@Override
public void subscribe(final Subscriber super T> subscriber) {
(publishers.isEmpty() ? Util.empty() : with(Source.of(publishers)).flatMap(p -> p).get())
.subscribe(subscriber);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy