Programatical sequences in project reactor (#5482)
* Added programatically creating sequences in project reactor * Added programatically creating sequences in project reactor
This commit is contained in:
parent
8c3598b441
commit
ef3614a5a0
|
@ -0,0 +1,44 @@
|
||||||
|
package com.baeldung.reactor;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
|
||||||
|
public class ItemProducerCreate {
|
||||||
|
|
||||||
|
Logger logger = LoggerFactory.getLogger(NetworTrafficProducerPush.class);
|
||||||
|
|
||||||
|
Consumer<List<String>> listener;
|
||||||
|
|
||||||
|
public void create() {
|
||||||
|
Flux<String> articlesFlux = Flux.create((sink) -> {
|
||||||
|
ItemProducerCreate.this.listener = (items) -> {
|
||||||
|
items.stream()
|
||||||
|
.forEach(article -> sink.next(article));
|
||||||
|
};
|
||||||
|
});
|
||||||
|
articlesFlux.subscribe(ItemProducerCreate.this.logger::info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ItemProducerCreate producer = new ItemProducerCreate();
|
||||||
|
producer.create();
|
||||||
|
|
||||||
|
new Thread(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
List<String> items = new ArrayList<>();
|
||||||
|
items.add("Item 1");
|
||||||
|
items.add("Item 2");
|
||||||
|
items.add("Item 3");
|
||||||
|
producer.listener.accept(items);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.baeldung.reactor;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
import reactor.core.publisher.FluxSink.OverflowStrategy;
|
||||||
|
|
||||||
|
public class NetworTrafficProducerPush {
|
||||||
|
|
||||||
|
Logger logger = LoggerFactory.getLogger(NetworTrafficProducerPush.class);
|
||||||
|
|
||||||
|
Consumer<String> listener;
|
||||||
|
|
||||||
|
public void subscribe(Consumer<String> consumer) {
|
||||||
|
Flux<String> flux = Flux.push(sink -> {
|
||||||
|
NetworTrafficProducerPush.this.listener = (t) -> sink.next(t);
|
||||||
|
}, OverflowStrategy.DROP);
|
||||||
|
flux.subscribe(consumer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onPacket(String packet) {
|
||||||
|
listener.accept(packet);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
NetworTrafficProducerPush trafficProducer = new NetworTrafficProducerPush();
|
||||||
|
trafficProducer.subscribe(trafficProducer.logger::info);
|
||||||
|
trafficProducer.onPacket("Packet[A18]");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
package com.baeldung.reactor;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
|
||||||
|
public class ProgramaticSequences {
|
||||||
|
|
||||||
|
Logger logger = LoggerFactory.getLogger(ProgramaticSequences.class);
|
||||||
|
|
||||||
|
public void statefullImutableGenerate() {
|
||||||
|
Flux<String> flux = Flux.generate(() -> 1, (state, sink) -> {
|
||||||
|
sink.next("2 + " + state + " = " + 2 + state);
|
||||||
|
if (state == 101)
|
||||||
|
sink.complete();
|
||||||
|
return state + 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
flux.subscribe(logger::info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void statefullMutableGenerate() {
|
||||||
|
Flux<String> flux = Flux.generate(AtomicInteger::new, (state, sink) -> {
|
||||||
|
int i = state.getAndIncrement();
|
||||||
|
sink.next("2 + " + state + " = " + 2 + state);
|
||||||
|
if (i == 101)
|
||||||
|
sink.complete();
|
||||||
|
return state;
|
||||||
|
});
|
||||||
|
|
||||||
|
flux.subscribe(logger::info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handle() {
|
||||||
|
Flux<String> elephants = Flux.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
|
||||||
|
.handle((i, sink) -> {
|
||||||
|
String animal = "Elephant nr " + i;
|
||||||
|
if (i % 2 == 0) {
|
||||||
|
sink.next(animal);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
elephants.subscribe(logger::info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ProgramaticSequences ps = new ProgramaticSequences();
|
||||||
|
|
||||||
|
ps.statefullImutableGenerate();
|
||||||
|
ps.statefullMutableGenerate();
|
||||||
|
ps.handle();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package com.baeldung.reactor;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import reactor.core.publisher.Flux;
|
||||||
|
|
||||||
|
public class StatelessGenerate {
|
||||||
|
|
||||||
|
Logger logger = LoggerFactory.getLogger(StatelessGenerate.class);
|
||||||
|
|
||||||
|
public void statelessGenerate() {
|
||||||
|
Flux<String> flux = Flux.generate((sink) -> {
|
||||||
|
sink.next("hallo");
|
||||||
|
});
|
||||||
|
flux.subscribe(logger::info);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
StatelessGenerate ps = new StatelessGenerate();
|
||||||
|
ps.statelessGenerate();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue