Foto af John Salzarulo på Unsplash

[Reactor Java # 2] Hvordan man manipulerer dataene inde i Mono og Flux?

Reactor er et Java-bibliotek til at oprette reaktive ikke-blokerende applikationer på JVM baseret på Reactive Streams Specification.

Denne artikel er den anden af ​​en serie, der har som mål at guide dig gennem processen med at oprette, manipulere og styre udførelsen af ​​de reaktive streams, der tilbyder Reactor gennem Mono og Flux klasser.

I denne anden artikel viser jeg dig, hvordan værdier i Mono og Flux kan ændres og transformeres. Vi gør dette gennem eksempler.

Anvendelse af matematiske operationer på din Flux eller Mono

Lad os sige, at du vil beregne kvadratet for hver heltalværdi i intervallet 1 til 100. For at gøre dette med en Flux, skal du først oprette en Flux, der indeholder alle heltalværdierne fra 1 til 100, ved at gøre Flux.range (1, 100).

Så beregner du kvadratet for hver værdi?

Mono og Flux tilvejebringer en kortmetode, som interface er Flux kort (Funktion kortlægger). Dette betyder, at en funktion, der omdanner et element af type A til en type B til kortmetoden, anvender din Flux denne funktion til hvert element i Flux, hvilket resulterer i omdannelse af din Flux til en Flux . Bemærk, at det er muligt, at B er af samme type som A. Ved hjælp af denne metode kan vi anvende kvadratfunktionen på vores Flux. Lad mig demonstrere:

Dette fungerer det samme med Mono.

Anvendelse af flere transformationer på Flux og Mono

Lad os nu se på et eksempel, der kæder flere kortopkald.

FlatMap-metoden

FlatMap-metoden ligner kortmetoden med den nøgleforskel, som den leverandør, du leverer til den, skal returnere en Mono eller Flux . Brug af kortmetoden ville resultere i en Mono > mens anvendelse af flatMap resulterer i en Mono .

For eksempel er det nyttigt, når du skal foretage et netværkopkald for at hente data, med en java-api, der returnerer en Mono, og derefter et andet netværkopkald, der har brug for resultatet af det første.

Det giver også mulighed for at håndtere fejl præcist. Lad mig demonstrere med et andet eksempel nedenfor.

Lynlåsemetoden

Lad os forstå denne metode med et eksempel. Forestil dig, at du vil skrive en metode, der henter oplysningerne fra en bruger plus alle de kommentarer, hun skrev på dit websted.

Ved hjælp af en flatMap skriver du:

Problemet med ovenstående kode er, at det ringer til at få brugerkommentarer, efter at dit program har modtaget userInfo. Det er slet ikke godt for din brugeroplevelse.

Zip-metoden gør det nemt at kombinere resultaterne fra flere Mono med den store fordel, at udførelsen af ​​din zip-metode vil vare så meget som den længste Mono, ikke summen af ​​alle henrettelser.

Så at gøre det samme som ovenfor kan nu gøres med nedenstående kode:

Filtrering af elementerne i en Flux eller Mono

Du kan også anvende et filter på de elementer, der indeholder en Flux eller en Mono med filtermetoden.

Valg af en delmængde af en Flux

Mens du arbejder med Flux, kan du vælge en undergruppe af Flux. Klassen indeholder 7 metoder til at vælge det undergruppe, der bedst passer til dine behov. Disse metoder er:

offentlig Flux  tage (lang n)
offentlig flux  tage (varighedstid)
public Flux  take (Varighedstidspanel, Scheduler-timer)
offentlig Flux  takeLast (int n)
offentlig Flux  takeUntil (Predikat  predikat)
public Flux  takeUntilOther (Publisher  andet)
public Flux  takeWhile (Predicate  continuePredicate)

Som standard tager take-metoderne de første elementer i Flux.

Konklusion

Denne anden artikel vejledte dig gennem anvendelse af transformationer på elementerne i en Flux eller en Mono.

I næste artikel viser jeg dig, hvordan Mono og Flux opfører sig.

Artikel # 3: https://medium.com/@cheron.antoine/reactor-java-3-how-do-mono-and-flux- behave-1b57ed1c432c