BAEL-679 code for reactive streams (#1970)
* BAEL-679 code for reactive streams * BAEL-679 typo
This commit is contained in:
committed by
Grzegorz Piwowarek
parent
d614fc2fa7
commit
9184693a2b
@@ -0,0 +1,43 @@
|
||||
package com.baeldung.java9.streams.reactive;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Flow.Subscriber;
|
||||
import java.util.concurrent.Flow.Subscription;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class EndSubscriber<T> implements Subscriber<T> {
|
||||
private final AtomicInteger howMuchMessagesToConsume;
|
||||
private Subscription subscription;
|
||||
public List<T> consumedElements = new LinkedList<>();
|
||||
|
||||
public EndSubscriber(Integer howMuchMessagesToConsume) {
|
||||
this.howMuchMessagesToConsume = new AtomicInteger(howMuchMessagesToConsume);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSubscribe(Subscription subscription) {
|
||||
this.subscription = subscription;
|
||||
subscription.request(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(T item) {
|
||||
howMuchMessagesToConsume.decrementAndGet();
|
||||
System.out.println("Got : " + item);
|
||||
consumedElements.add(item);
|
||||
if (howMuchMessagesToConsume.get() > 0) {
|
||||
subscription.request(1);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
System.out.println("Done");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.baeldung.java9.streams.reactive;
|
||||
|
||||
import java.util.concurrent.Flow;
|
||||
import java.util.concurrent.SubmissionPublisher;
|
||||
import java.util.function.Function;
|
||||
|
||||
public class TransformProcessor<T, R> extends SubmissionPublisher<R> implements Flow.Processor<T, R> {
|
||||
|
||||
private Function<T, R> function;
|
||||
private Flow.Subscription subscription;
|
||||
|
||||
public TransformProcessor(Function<T, R> function) {
|
||||
super();
|
||||
this.function = function;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSubscribe(Flow.Subscription subscription) {
|
||||
this.subscription = subscription;
|
||||
subscription.request(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(T item) {
|
||||
submit(function.apply(item));
|
||||
subscription.request(1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable t) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
close();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user