Java 9 Flow使用lambdas定义订户
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 9 Flow使用lambdas定义订户,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2066字,纯文字阅读大概需要3分钟。
内容图文
![Java 9 Flow使用lambdas定义订户](/upload/InfoBanner/zyjiaocheng/735/9d4bc8160e2f42d9b5c3b013ba17e0e5.jpg)
我开始玩Java 9 Flow API,我发现并且不喜欢的第一件事,当我们将订阅者实现传递给发布者时,似乎我们不能使用lambdas,因为我们可以使用RxJava
所以我必须定义并实现我自己的Subscriber类
public class CustomSubscriber<T> implements Flow.Subscriber<T> {
protected Flow.Subscription subscription;
@Override
public void onSubscribe(Flow.Subscription subscription) {
this.subscription = subscription;
System.out.println("Subscription done:");
subscription.request(1);
}
@Override
public void onNext(T item) {
System.out.println("Got : " + item);
subscription.request(1);
}
@Override
public void one rror(Throwable t) {
t.printStackTrace();
}
@Override
public void onComplete() {
System.out.println("Done");
}
}
然后将其传递给我的出版商
SubmissionPublisher<String> publisher = new SubmissionPublisher<>();
publisher.subscribe(new CustomSubscriber<>());
这真的很冗长,据我所知,这是因为我们需要在onSubscribe回调中设置订阅
protected Flow.Subscription subscription;
稍后在onNext中用于继续排放subscription.request(1);
我仍然不明白为什么需要这种机制,但它避免像我们在RxJava中那样使用Lambdas作为这个例子
SubmissionPublisher<String> publisher = new SubmissionPublisher<>();
publisher.subscribe(item -> System.out.println("do something in the onNext"),
e -> System.out.println("do something in the one rror"),
() -> System.out.println("Do something in the onComplete"));
我想这是不可能的,我在这里没有遗漏任何东西吗?
解决方法:
I still dont get it why this mechanism it´s needed
订阅允许从订户到发布者的通信.请求方法允许订户应用backpressure,通知上游组件它过载并“需要中断”.为了做到这一点,订户需要保持订阅的实例并且需要偶尔调用请求以获得更多项目.
没有压力订阅者
如果您有一个用例,在那里您不需要应用背压并且希望从降低的复杂性中受益,您可以实现一个LaidBackSubscriber,其中:
>通过存储订阅并立即调用请求来实现onSubscribe
>通过执行构造期间给出的lambda然后调用subscription.request(1)来实现onNext
>通过执行构造期间给出的lambda来实现onError和onComplete
那应该可以得到你想要的东西.
一般建议
Java 9 Flow API was created作为现有异步库的集成点,而不是以临时方式实现反应组件的邀请.试验很好,但如果你真的想要创建一个反应系统,那么现有的库可能非常适合.
内容总结
以上是互联网集市为您收集整理的Java 9 Flow使用lambdas定义订户全部内容,希望文章能够帮你解决Java 9 Flow使用lambdas定义订户所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。