Flux
のセットがあるとします。これは、二重機能と一緒に圧縮したいと考えています。オブジェクトが特定の制約を満たしている場合Fluxはnull値を受け入れませんか?
Flux<String> flux1 = Flux.just("A", "B", "C");
Flux<String> flux2 = Flux.just("D", "E", "F");
Flux.zip(flux1, flux2, this::zipString).subscribe(System.out::println);
このbifunctionは以下
null
を返します。Flux
を一緒に圧縮した後にフィルタを適用する可能性があります。
public String zipString(String a, String b) {
if (a.equals("B"))
return null;
return a + b;
}
この戦略はNullPointerException
を投げてしまいます。
Exception in thread "main"
reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.NullPointerException: The zipper returned a null value
Caused by: java.lang.NullPointerException: The zipper returned a null value
at java.util.Objects.requireNonNull(Objects.java:228)
at reactor.core.publisher.FluxZip$ZipCoordinator.drain(FluxZip.java:711)
at reactor.core.publisher.FluxZip$ZipInner.onSubscribe(FluxZip.java:861)
at reactor.core.publisher.FluxArray.subscribe(FluxArray.java:53)
at reactor.core.publisher.FluxArray.subscribe(FluxArray.java:59)
EDIT:nullを含むFlux
がある場合にも発生します。
Flux<String> flux2 = Flux.just(null, "B", "C");
これは私に質問します。 null
の値がFluxに入ることを禁止されているのはなぜですか?
下にユースケースを軽減するためのいくつかの潜在的な戦略は何です:
がflux2したがって、セットが破棄されなければならない、我々は捨てるべき値が含まれています。
私の答えは、仕様に関連して、なぜストリームに「ヌル」を持つことができないのかについて説明します。あなたがそれを受け入れる前に待っているものがありますか? –