首页 > 编程语言 >RxJava快速入门

RxJava快速入门

时间:2024-07-18 20:08:14浏览次数:15  
标签:入门 Flowable 编程 观察者 数据流 操作符 RxJava 快速

简单来说RxJava是一个实现响应式编程的类库。

那什么是响应式编程?

响应式编程的核心思想是"数据流是第一等公民”,程序的逻辑建立在数据流的变化之上。

响应式编程的几个核心概念:
(1)数据流:在响应式编程中,数据以流(Streans)的形式存在。流就像一条河,源源不断。比如一个数组或集合可以看作一个数据流,数组或集合中的每个元素视为数据流中的数据项。

(2)异步处理:传统的同步编程模型中,当执行一个耗时的操作时,主线程会被阻塞,直到操作完成才能继续执行后续的代码。这种模型存在一个问题,即当一个操作耗时很长,主线程被阻塞时,整个应用程序就会感觉不够灵活和响应迟缓。
响应式编程则通过异步处理来解决这个问题。在响应式编程中,当需要执行一个可能耗时的操作时,不会让主线程直接等待其完成。相反,这个操作会被放到一个单独的执行线程(通常是线程池中的一个线程)中去执行,同时主线程可以继续执行其他任务而不被阻塞。一旦异步操作完成,会通过回调函数、观察者模式或者其他机制通知应用程序,以便在未来某个时间点处理操作结果。

(3)变化传播:当数据源发生变化时,响应式编程模型会自动将变化传播到依赖这些数据源的地方。这种传播是自动的,不需要显式调用。

什么是RxJava?

Rxlava是基于观察者模式实现的,分别有观察者和被观察者两个角色,被观察者会实时传输数据流,观察者可以观测到这些数据流。基于传输和观察的过程,用户可以通过一些操作方法对数据进行转换或其他处理。在RxJava中,观察者就是Observer,被观察者是Observable和Flowable。

Observable适合处理相对较小的、可控的、不会迅速产生大量数据的场景。它不具备背压处理能力,也就是说,当数据生产速度超过数据消费速度时,可能会导致内存溢出或其他性能问题。

Fowable是针对背压(反向压力)问题而设计的可观测类型。背压问题出现于数据生产速度超过数据消费速度的场景。Flowable 提供了多种背压策略来处理这种情况,确保系统在处理大量数据时仍然能够保持稳定。

被观察者. subscribe(观察者),它们之间就会建立订阅关系,被观察者传输的数据或者发出的事件会被观察者观察到。

前面提到用户可以通过一些方法对数据进行转换或其他处理,RxJava提供了很多操作符供我们使用,这块其实和Java8的Stream类似,概念上都是一样的。

操作符主要可以分为以下几大类:

变换类操作符,对数据流进行变换,如map、flatMap 等。比如利用map将int类型转为string

Flowable<String> flowable = Flowable.range(0,Integer.MAX_VALUE)
    .map(i->String.valueOf(i))

聚合类操作符,对数据流进行聚合,如toList、toMap等

Flowable.range(0,Integer.MAX_VALUE).toList()

过滤操作符,过滤或者跳过一些操作符,如fliter、skip等

Flowable.range(0,Integer.MAX_VALUE).fliter(i->i>10).toList();

连接操作符,将多个数据流连接到一起,如concat、zip等

//创建两个Flowable,通过concat连接得到一个被观察者,进行统一处理
//创建两个Flowable 对象
Flowable<String> flowable1 = Flowable.just( "A","B","C");
Flowable<String> flowable2 = Flowable.just("D","E","F");
//使用concat操作符将两个Flowable合并
Flowable<String> flowable = Flowable.concat(flowable1,flowable2);

排序操作符,对数据流内的数据进行排序,如sorted

Flowable<String> flowable = Flowable.concat(flowable1,flowable2).sorted();

RxJava也是一个基于事件驱动的框架,我们来看看一共有哪些事件,分别在什么时候触发:

  1. onNext,被观察者每发送一次数据,就会触发此事件。
  2. onError,如果发送数据过程中产生意料之外的错误,那么被观察者可以发送此事件。
  3. onComplete,如果没有发生错误,那么被观察者在最后一次调用onNext,之后发送此事件表示完成数据传输。对应的观察者得到这些事件后,可以进行一定处理,例如:
flowable.observeon( Schedulers.io())
.doOnNext( item -> {
System.out.println("来数据啦"+ item.toString());})
.doOnError(e -> {
system.out.println("出错啦"+e.getMessage( ));})
.doonComplete(( ->{
system.out.println("数据处理完啦");}).subscribe();

标签:入门,Flowable,编程,观察者,数据流,操作符,RxJava,快速
From: https://www.cnblogs.com/hashcodee/p/18310339

相关文章

  • Java多线程入门
    创建线程的三种方式继承Thread类classMyThreadextendsThread{@Overridepublicvoidrun(){for(inti=0;i<100;i++){System.out.println(getName()+""+i);}}publicstaticvoidmain(String[]args......
  • 基于Python语言的入门算法和数据结构(持续更新中,求关注一波)[链表 栈 队列 复杂度 操作]
    这篇文章主要是讲的Python语言的算法,本人还在不断记笔记中,文章也会持续更新,内容比较浅薄,请大家指教另外推荐一个比较好用的记笔记的软件Typora,自己已经使用很久了,感觉不错。。。虽然但是还是有欠缺。目录第一章算法概述1.1什么是数据结构?01数据结构都有哪些组成方式02......
  • 自学网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    如何入门网络安全_网络安全自学由于我之前写了不少网络安全技术相关的故事文章,不少读者朋友知道我是从事网络安全相关的工作,于是经常有人在微信里问我:我刚入门网络安全,该怎么学?要学哪些东西?有哪些方向?怎么选?不同于Java、C/C++等后端开发岗位有非常明晰的学习路线,网路安......
  • 自学网络安全入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    如何入门网络安全_网络安全自学由于我之前写了不少网络安全技术相关的故事文章,不少读者朋友知道我是从事网络安全相关的工作,于是经常有人在微信里问我:我刚入门网络安全,该怎么学?要学哪些东西?有哪些方向?怎么选?不同于Java、C/C++等后端开发岗位有非常明晰的学习路线,网路安......
  • mysql入门
    1.mysql下载 https://dev.mysql.com/downloads/mysql/我下载的是这个(两个的区别:上面的是联网安装,下面的是直接下载到本地安装)  2.下载后点击安装,按照指示一直点击下一步就可以安装过程中需要记录自己设置的密码,以及WindowsServiceName,之后连接的时候需要用到。 ......
  • 如何快速排查线上问题 -copy qf
    排查流程图flowchartTBA-->B-->C-->D-->EsubgraphA[认识问题]A1[收集信息]A2[确认问题]A3[复现问题]A4[影响范围]A1-->A2-->A3-->A4endsubgraphB[诊断/确认问题]B1[检查网络连接]......
  • VS快速全局查找Unity死循环代码
    1、编写一个死循环方法,然后运行调试vsusingUnityEngine;publicclassDeadLoop:MonoBehaviour{//StartiscalledbeforethefirstframeupdatevoidStart(){DeadLoopMethod();}voidDeadLoopMethod(){while(t......
  • Windows入门
    1.隐藏和显示控制台窗口WM_SYSCOMMAND:系统命令消息。SC_MINIMIZE:将窗口最小化。SC_RESTORE:将窗口还原。#include<windows.h>intmain(){HWNDhWnd=GetConsoleWindow();::SendMessage(hWnd,WM_SYSCOMMAND,SC_MINIMIZE,NULL);//程序运行至此处后,控制台......
  • 如何免费、无成本、快速的发布搭建自己的项目网站
    在这里推广使用OutSystems免费版本进行小型代码发布和部署的初步使用,待用户量增大后再考虑是否升级,可以先根据自身需求实现初步功能对于想要在无成本前提下快速实现自身想要的功能的用户有很大帮助,拥有自己的网站,可以尝试使用优点1.快速开发低代码平台:通过拖放......
  • Temu在法国快速崛起,一年赶上Shein,法国有哪些电商平台?
    欧洲是跨境电商最主要的市场之一,其中法国是欧洲第三大电商市场,仅次于英国和德国,也是全球第七大电商市场。日前,据外媒报道,Temu自2023年4月进军法国市场以来,迅速吸引了众多法国消费者,市场渗透率达到11.9%,大有赶超先进入法国市场的Shein平台的架势。Temu在法国快速崛起,一年赶上S......