首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >理解基础数据源具有新值时可观察到的RxJava

理解基础数据源具有新值时可观察到的RxJava
EN

Stack Overflow用户
提问于 2021-01-08 22:35:58
回答 1查看 146关注 0票数 0

我正在尝试实验RxJava可观测和观察者代码。我的目标是检查底层源接收新数据值时是如何工作的。我的代码是:

代码语言:javascript
运行
AI代码解释
复制
List<Integer> numbers = new ArrayList<>();
Runnable r = new Runnable() {
            @Override
            public void run() {
                int i = 100;
                while(i < 110) {
                    numbers.add(i);
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    i++;
                }
            }
        };
        numbers.add(0);
        numbers.add(1);
        numbers.add(2);
        Observable.fromIterable(numbers)
                .observeOn(Schedulers.io())
                .subscribe(i -> System.out.println("Received "+i+ " on "+ Thread.currentThread().getName()),
                        e -> e.printStackTrace());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Thread t = new Thread(r);
        t.start();

        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

所以我有一个号码列表。然后,我有一个runnable,它在这个列表中添加了新的数字,在添加之间有一个时间间隔。我还没开始织线呢。我将0,1,2添加到列表中,然后用它创建一个可观察的,从池中调度线程上的观察者,最后订阅可观察到的线程。当订阅发生时,可观察的发出值0,1,2和观察者被调用(执行传递给订阅的lambda)。然后在主线程上引入1秒的延迟,然后使用前面创建的runnable生成一个新线程,并添加最后一个延迟,这样应用程序就不会立即退出。

我期望的是,当新的数字被添加到列表中时,必须调用观察者,从而打印消息。但这是不可能的。在我的理解上,我肯定弄错了。我是否也需要将可观察性放在调度程序上?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-09 04:20:55

Observable.fromIterable()方法是每次构建订阅时可观察到的值的“一次”加载。在构建订阅之后发生的事情不再有影响了。当您使用带有subscribe(onNext, onError, onComplete)参数的onComplete方法时,您将看到订阅已经完全消耗,三个初始值已经打印出来。

您可以使用Subject (类似于PublishSubject),其中使用onNext()方法添加“新值”,而之前构建的订阅仍然处于活动状态(尚未完成)。这样,您就可以先构建订阅,然后继续为主题中的新值调用onNext(),直到完成并调用onCompleted()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65640038

复制
相关文章
OpenStack命令创建一个指定的卷
查看卷类型列表 [root@controller ~]# openstack volume type list ID Name Is Public 0fed6ef3-4b9b-4519-bdb0-36fecb7c5b94 hdd True 05c4ce95-8e73-4ccf-8025-304b738d1098 ssd True 创建一个卷名叫 wocaoa的卷 大小为:100G 类型为:SSD [root@controller ~]# openstack volume create wocaoa --
院长技术
2020/06/13
1.1K0
在数组内删除指定元素_数组对象删除某一个指定对象
一般来说,我们用数组这种数据结构最多的情况,是用来做查询,时间复杂度为O(1),那么在这里我们来看一下如何用在数组中插入元素和删除元素。 数组的适用场景: 一般在查询中,适用数组的情况是比较多,因为可以根据下标直接访问元素,时间复杂度是O(1),所以适用于读多写少的场景。 数组的插入和删除元素,一般时间复杂度都是O(N),比较麻烦,所以对于插入和删除操作中,不建议选用数组这种数据结构,可以考虑链表。
全栈程序员站长
2022/09/22
2.2K0
近2万字详解JAVA NIO2文件操作,过瘾!
从classpath中读取过文件的人,都知道需要写一些读取流的方法,很是繁琐。最近使用IDEA在打出.这个符号的时候,一行代码让人激动不已:竟然提供直接读出bytes字节的方法。
xjjdog
2020/03/17
8920
让一个 csproj 项目指定多个开发框架
发布于 2018-01-21 03:28 更新于 2018-08-31 09:56
walterlv
2018/09/18
1K0
让一个 csproj 项目指定多个开发框架
FFmpeg如何将一个gif嵌入视频指定位置并指定显示时间
ffmpeg version 2022-04-07-git-607ecc27ed-full_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers
乔达摩@嘿
2023/09/21
3250
Java从一个数组指定位置拷贝到另外一个数组的指定位置-新法
根据提示我们发现可以通过 System.arraycopy() 方法来替换这个for循环。
明明如月学长
2021/08/27
7000
如何使用git clone一个指定文件或者目录
1.先创建一个空目录 mkdir -p /use/dir 2.进入创建的目录 cd /use/dir 3. 执行git init 初始化git git init 4. 和远程git 库进行关联 git remote add -f origin git@git.xxx.com:xxx/xxx.git 5. 开启稀疏检出 git config core.sparsecheckout true 6. sparse-checkout文件里写入要拉取的文件或者文件夹 echo "clone_file" >> .gi
特特
2022/05/22
11.8K0
Python 以一个指定的间隔定时循环执
http://www.linuxidc.com/Linux/2014-03/97555.htm
py3study
2020/01/06
1.3K0
一个文本按指定字符分割成多个文本
今天师兄扔给我一个txt,说:“来,小郭,你把这个文本处理一下,按照指定字符分割成多个文本。”这下可难倒我了,不过好在功夫不负有心人,几经周折之后把它完成了。
快学Python
2021/08/09
3.8K0
js去除字符串最后一个指定字符
具体实现代码如下: function delLast(str, target) { return str.split('').reverse().join('').replace(target, '').split('').reverse().join(''); } const str = delLast('asdfghhj', 'h') console.log(str) // asdfghj
IT工作者
2021/12/28
2.9K0
生成一个指定长度的随机数
生成随机数在日常工作中的使用率也很高。虽说Python标库自带了生成随机数的功能。但是我想写一个函数,既可以生成数字,又可以生成字符串。而且还可以指定长度,自由自在的生成需要的数据。把它放在我的工具库中,工作过程中需要的时候,随时随地调用,可不快哉。
TalkPython
2020/05/27
1.5K0
Unreal随笔系列4:UE4关闭指定平台距离场烘培
我们项目构建了Linux版本的客户端,用于DS的压测。最近一段时间, Unreal Linux Client的构建时间异常的久,所以简单的探究了下Cook的原理。最终通过关闭linux平台下的距离场(Distance Field)烘培,缓解了构建时间的问题。
JohnYao
2023/03/23
5750
Unreal随笔系列4:UE4关闭指定平台距离场烘培
Dispatch – 让指定程序使用指定网卡
在参与迅雷水晶项目之后,reizhi 开始想尽一切办法提高挖矿的速度。由于每一个水晶资格账号允许同时在路由器以及 PC 上运行,同时挂机无疑能够大大增加水晶产出速度。但迅雷水晶运行时会产生大量 TCP/UDP 连接,严重影响无线网卡吞吐量,导致挖水晶时上网速度缓慢。由于有线连接并不可行,最终决定使用双无线连接,一个用于上网,另一个专职挖水晶。但问题也随之而来,无论是 Windows 还是迅雷水晶都没有提供指定网卡的功能,同时连接两个无线后并没有获得想要的效果。于是在 Google 上搜索“指定程序 网卡”,但最终一无所获。最后想起很久以前用过 Connectify 所附带的 Dispatch 似乎提供这个功能,遂下载试用。
reizhi
2022/09/26
4.7K0
Dispatch – 让指定程序使用指定网卡
视频融合平台EasyCVR如何下载指定时间段的录像文件?
EasyCVR视频融合平台部署轻快、功能灵活,在视频能力上,可提供视频直播、录像、回放、检索、云存储、告警上报、集群以及平台级联等功能。平台可支持多协议、多类型设备接入,包括国标GB28181、RTMP、RTSP/Onvif、海康SDK、大华SDK、Ehome等,对外可分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。
TSINGSEE青犀视频
2022/09/13
4310
Java 如何返回一个指定范围的随机数
使用 RandomUtils 类中定义的方法,RandomUtils 定义在下面的 Package 中
HoneyMoose
2019/01/22
1.7K0
【转】指定文件、指定行、指定代码块不使用 ESLint 语法检查
在使用了 eslint 进行代码检查后,可以大幅提高我们的代码规范。但是,在某些情况下,我们必须去写一些违反规则的代码。如果写了这些代码,则势必会导致各种提示报错。这种情况下,如果不去处理,则会导致项目警告越来越多,最终不知道哪些是必须的,哪些是可以修正的。 因此,在某些地方,禁用检查就变得十分重要了。随便搜索了一下,找到了这篇博文,写得还比较全面,因此转载过来了。
FungLeo
2019/07/02
1.7K0
Js 删除 指定Domin 指定 path 下的 cookie中指定的内容
假设,cookie中的key 为 keyName 则如果想删除客户端浏览器中某 Domin 某 Path 下的cookie内容的 keyName这一项,则可以操作如下(此时 Domin 为 xxx.com.cn,Path 为 /):
MickyInvQ
2020/09/27
4K0
Java NIO File操作
今天在工作中遇到一个很奇怪的问题。使用java.io.File进行文件操作抛出了FileNotFoundException,代码如下 //但事实上在`/somewhere`目录下存在文件`测试.txt` FileInputStream fin = new FileInputStream(new File("/somewhere/测试.txt")); 在网络找了下,发现一个可能是由于路径中包括非ASCII字符,详见这里 最后找到了解决方案 1 InputStream fin = Files.newInputS
jeremyxu
2018/05/10
1.4K0
点击加载更多

相似问题

setState在UI上没有正确显示更改

25

语义UI消息列表没有正确显示

11

顺风3调色板没有正确生成

18

UIImageView没有显示在UI中。

35

调色板没有返回正确的长度?

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档