在filter方法之后,subscribe方法似乎提供了一个nullpointerexception。当我删除过滤器方法时,一切工作正常。为什么?
Flux<String> flux = new Flux<String>() {
@Override
public void subscribe(CoreSubscriber<? super String> coreSubscriber) {
coreSubscriber.onNext("Test 7");
coreSubscriber.onNext("test 6"); //line 33
coreSubscriber.onNext("test 5");
coreSubscriber.onNext("test 4");
coreSubscriber.onNext("test 3");
coreSubscriber.onNext("test 2");
coreSubscriber.onNext("test 1");
coreSubscriber.onComplete();
}
};
flux
.filter((s) -> s.contains("7"))
.subscribe(System.out::println); //line 45
我收到以下错误:
Exception in thread "main" java.lang.NullPointerException
at reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:100)
at com.douma.reactor.App$1.subscribe(App.java:33)
at reactor.core.publisher.FluxFilter.subscribe(FluxFilter.java:52)
at reactor.core.publisher.Flux.subscribe(Flux.java:6873)
at reactor.core.publisher.Flux.subscribeWith(Flux.java:7040)
at reactor.core.publisher.Flux.subscribe(Flux.java:6866)
at reactor.core.publisher.Flux.subscribe(Flux.java:6830)
at reactor.core.publisher.Flux.subscribe(Flux.java:6773)
at com.douma.reactor.App.test2(App.java:45)
at com.douma.reactor.App.main(App.java:24)
答案 0 :(得分:0)
您正在Flux
方法内设置subscribe
容器的初始值。调用filter
时,初始值仍为null
,因此contains
引发异常。将此添加到您的代码中:
flux.startWith("starter string")
.filter((s) -> s.contains("7") || s.contains("starter"))
.subscribe(System.out::println); // Prints out "starter string" and "Test 7"