Flow to nie jest typ, a wraper obiektowy dla danego typu, który w skazuje, że dane te są strumieniem (tak naprawdę jest rodzajem sekwencji danych asynchronicznych emitowanych przez producenta ).
W przeciwieństwie do "Long", który jest typem danych prymitywnych, "Flow<Long>" reprezentuje strumień danych typu Long,
i to jeszcze asynchroniczny, zależy od języka, nie wiem czy piszesz w Javie, Kotlinie czy Swift - to należy najpierw zasubskrybować do danych i sprawdzić czy one istnieja, po subskrybcji - tak naprawdę dysponujesz konkretnym typem.
KOTLIN:
runBlocking(() -> {
lastRecord.collect(lastRecordValue -> {
if (lastRecordValue == today) {
System.out.println("Wartość emitowana przez strumień jest równa wartości today.");
} else {
System.out.println("Wartość emitowana przez strumień nie jest równa wartości today.");
}
});
W javie musisz miec subskrybcje w inny sposób
https://www.baeldung.com/java-9-reactive-streams
import java.util.concurrent.Flow;
import java.util.concurrent.SubmissionPublisher;
import java.util.concurrent.TimeUnit;
public class ExampleClass {
public static void main(String[] args) throws InterruptedException {
long currentTime = System.currentTimeMillis();
SubmissionPublisher<Long> publisher = new SubmissionPublisher<>();
publisher.submit(System.currentTimeMillis());
publisher.consume(value -> {
if (value == currentTime) {
System.out.println("The value from the Flow<Long> is equal to the current time.");
} else {
System.out.println("The value from the Flow<Long> is not equal to the current time.");
}
});
TimeUnit.SECONDS.sleep(1);
publisher.close();
}
}
Prościej?
Po prostu możesz na obiekcie Flow<Long> wywołać subscribe...
// Subskrybujemy się do strumienia
lastRecord.subscribe(new Flow.Subscriber<Long>() {
@Override
public void onSubscribe(Flow.Subscription subscription) {
subscription.request(1);
}
@Override
public void onNext(Long value) {
// Obsługujemy wartości emitowane przez strumień
if (value == currentTime) {
// tutaj cos wykonujesz i porównać możesz po prostu gdyz juz masz
// doczynienia z wartoscią obiektu FLOW
}
}
@Override
public void onError(Throwable throwable) {
throwable.printStackTrace();
}
@Override
public void onComplete() {
System.out.println("Subscription completed.");
}
});