https://github.com/neeravbhaskarla/reactive_programming_methods_practise
https://github.com/neeravbhaskarla/reactive_programming_methods_practise
reactive-programming spring
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/neeravbhaskarla/reactive_programming_methods_practise
- Owner: neeravbhaskarla
- Created: 2025-05-18T18:53:46.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-18T19:00:53.000Z (about 1 year ago)
- Last Synced: 2025-06-16T21:44:09.758Z (about 1 year ago)
- Topics: reactive-programming, spring
- Language: Java
- Homepage:
- Size: 12.7 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Full Notes: `FluxAndMonoGeneratorService`
---
## ✅ Basic Flux Operations
---
### 📌 Method: `namesFlux()`
**Description:** Emits the list of names as a `Flux` and logs emissions.
**APIs used:** `Flux.fromIterable()`, `log()`
```java
public Flux namesFlux() {
return Flux.fromIterable(names).log();
}
```
---
### 📌 Method: `namesMap()`
**Description:** Converts each name to uppercase.
**APIs used:** `map()`
```java
public Flux namesMap() {
return Flux.fromIterable(names)
.map(String::toUpperCase)
.log();
}
```
---
### 📌 Method: `namesMapImmutable()`
**Description:** Demonstrates immutability — creates a new mapped `Flux`.
**APIs used:** `map()`
```java
public Flux namesMapImmutable() {
var flux = Flux.fromIterable(names).log();
return flux.map(String::toUpperCase);
}
```
---
### 📌 Method: `namesMapCustomChange()`
**Description:** Converts to uppercase, then prefixes length to each name.
**APIs used:** `map()`
```java
public Flux namesMapCustomChange() {
var flux = Flux.fromIterable(names)
.map(String::toUpperCase)
.map(name -> name.length() + "-" + name)
.log();
return flux;
}
```
---
### 📌 Method: `namesFluxFilter()`
**Description:** Filters names where length > 3.
**APIs used:** `filter()`
```java
public Flux namesFluxFilter() {
var flux = Flux.fromIterable(names)
.filter(name -> name.length() > 3)
.log();
return flux;
}
```
---
## ✅ FlatMap / ConcatMap Operations
---
### 📌 Method: `namesFluxFlatMap()`
**Description:** Flattens each name to characters (no guaranteed order).
**APIs used:** `flatMap()`
```java
public Flux namesFluxFlatMap() {
var flux = Flux.fromIterable(names)
.flatMap(this::flattenString)
.log();
return flux;
}
```
---
### 📌 Method: `namesFluxFlatMapAsync()`
**Description:** Same as `flatMap()` but with delay.
**APIs used:** `flatMap()`
```java
public Flux namesFluxFlatMapAsync() {
var flux = Flux.fromIterable(names)
.flatMap(this::flattenStringWithDelay)
.log();
return flux;
}
```
---
### 📌 Method: `namesFluxConcatMapAsync()`
**Description:** Flattens while preserving order (consumes more time).
**APIs used:** `concatMap()`
```java
public Flux namesFluxConcatMapAsync() {
var flux = Flux.fromIterable(names)
.concatMap(this::flattenStringWithDelay)
.log();
return flux;
}
```
---
## ✅ Transform & Fallback Operations
---
### 📌 Method: `namesFluxTransform()`
**Description:** Applies reusable filtering + uppercase transformation via `transform()`.
**APIs used:** `transform()`, `filter()`, `map()`
```java
public Flux namesFluxTransform() {
Function, Flux> transformToIndividualUpperCaseChars = name ->
name.filter(word -> word.length() > 3)
.map(String::toUpperCase);
var flux = Flux.fromIterable(names)
.transform(transformToIndividualUpperCaseChars)
.log();
return flux;
}
```
---
### 📌 Method: `namesFluxDefaultIfEmpty()`
**Description:** Provides default value if no elements pass the filter.
**APIs used:** `transform()`, `defaultIfEmpty()`
```java
public Flux namesFluxDefaultIfEmpty() {
Function, Flux> transformToIndividualUpperCaseChars = name ->
name.filter(word -> word.length() > 13)
.map(String::toUpperCase);
var flux = Flux.fromIterable(names)
.transform(transformToIndividualUpperCaseChars)
.defaultIfEmpty("default")
.log();
return flux;
}
```
---
### 📌 Method: `namesFluxSwitchIfEmpty()`
**Description:** Switches to another Flux if source is empty.
**APIs used:** `transform()`, `switchIfEmpty()`
```java
public Flux namesFluxSwitchIfEmpty() {
Function, Flux> transformToIndividualUpperCaseChars = name ->
name.filter(word -> word.length() > 13)
.map(String::toUpperCase);
var defaultFlux = Flux.just("default").transform(name -> name.map(String::toUpperCase));
var flux = Flux.fromIterable(names)
.transform(transformToIndividualUpperCaseChars)
.switchIfEmpty(defaultFlux)
.log();
return flux;
}
```
---
## ✅ Mono Operations
---
### 📌 Method: `nameMono()`
**Description:** Emits a single value "alex".
**APIs used:** `Mono.just()`
```java
public Mono nameMono() {
return Mono.just("alex");
}
```
---