Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我的doOnComplete在.Map finsihes之前被调用

我的doOnComplete在.Map finsihes之前被调用
EN

Stack Overflow用户
提问于 2020-09-04 05:00:42
回答 2查看 240关注 0票数 1

我对kotlin观察点有一个问题,我已经通过互联网和stackoverflow搜索过了,但我认为我在概念上遗漏了一些东西。我有一个名为getCallsCountForWeek的dashboardRepository,它基本上返回了过去7天的可流动列表,现在我需要迭代所有的可流动对象,然后用用户当天的调用次数更新我的图形。以下是我的代码

代码语言:javascript
运行
AI代码解释
复制
fun getCallsCountForWeek(calendar: Calendar) : List<Flowable<Float>> {

    val result = ArrayList<Flowable<Float>>()

    for(index  in 0..6) {
        calendar.add(Calendar.DAY_OF_MONTH, -index)
        result.add(dashbordDao.getCallsCountForDay(customSharedPreferences.getUser()?.id!!, CustomDateTimeUtil.getStartOfDay(calendar), CustomDateTimeUtil.getEndOfDay(calendar)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()))
    }

    return result
}


        Observable.fromArray(dashboardRepository
        .getCallsCountForWeek(calendar). map {
        items -> kotlin.run {
            items.forEach {
                it.subscribe({
                    Log.e("Result", " Count: " + it)
                },{
                    Log.e("Error", "" + it)
                })
            }
        }
    }.doOnComplete {
        //We will do this when it is completed
        Log.e("Result", "Completed")
    }.doFinally {
        Log.e("Result", "Finally")
    }.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe()

问题是,在map完成对所有可流动对象的迭代之前,会调用doFinally和doOnComplete。我尝试将.zip用于可流动对象,但显然也无法使其工作。

根据其他关于堆栈溢出的帖子,订阅成功时会调用doOnComplete,但我希望在.map内部完成所有工作后调用。

EN

回答 2

Stack Overflow用户

发布于 2020-09-04 07:24:22

您应该使用flatMapflatMapIterable而不是map,并且只有一个subscribe调用

代码语言:javascript
运行
AI代码解释
复制
 Observable.fromArray(dashboardRepository
    .getCallsCountForWeek(calendar)
    .flatMapIterable { it }  // iterate over list
    .flatMap { it }  // use flowables from list
    .doOnNext { /* do something with every item */ }
    .doOnComplete {
        //We will do this when it is completed
        Log.e("Result", "Completed")
    }
    .doFinally {
        Log.e("Result", "Finally")
   
    }
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .ignoreElements () // if you already handled everything in the doOnNext
    .subscribe()
票数 0
EN

Stack Overflow用户

发布于 2020-09-04 08:02:46

在调查了尤金·波波维奇的回答后。我被指引到正确的方向,然后我做了下面的事情,它起作用了。

所以,首先,我修改了我的函数,返回单个可观察对象的列表,而不是像任何有意义的人那样返回可流动对象的列表。完成后,我按照尤金的建议做了如下操作,但只使用了flatMapSingle而不是flatMap。

代码语言:javascript
运行
AI代码解释
复制
    Observable.fromArray(dashboardRepository.getCallsCountForWeek(calendar))
        .flatMapIterable { it }  // iterate over list
        .flatMapSingle {
                it
        }
        .doOnNext {
            barEtries.add( BarEntry(index++, it))
        }
        .doOnComplete {
            //We will do this when it is completed
            Log.e("Result", "Completed "+barEtries)
            setBarChartData()
        }
        .doFinally {
            Log.e("Result", "Finally")

        }
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .ignoreElements () // if you already handled everything in the doOnNext
        .subscribe()

订阅的变化如下所示,基本上只是使用single而不是Flowable,因为它更有意义,而且flatMapSingle提供了开箱即用的解决方案,甚至不需要调用getCallsCountForWeek。

代码语言:javascript
运行
AI代码解释
复制
fun getCallsCountForWeek(calendar: Calendar) : ArrayList<Single<Float>> {

  val result = ArrayList<Single<Float>>()

   for(index  in 0..6) {
      calendar.add(Calendar.DAY_OF_MONTH, -index)
    result.add(dashbordDao.getCallsCountForDay(customSharedPreferences.getUser()?.id!!, CustomDateTimeUtil.getStartOfDay(calendar), CustomDateTimeUtil.getEndOfDay(calendar)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()))
}

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

https://stackoverflow.com/questions/63735094

复制
相关文章
VC 在调用main函数之前的操作
title: VC 在调用main函数之前的操作 tags: [VC++, 反汇编, C++实现原理] date: 2018-09-16 10:36:23 categories: VC++反汇编分析 keywords: VC++, 反汇编, C++实现原理, main函数调用, VC 运行环境初始化 --- 在C/C++语言中规定,程序是从main函数开始,也就是C/C++语言中以main函数作为程序的入口,但是操作系统是如何加载这个main函数的呢,程序真正的入口是否是main函数呢?本文主要围绕这个主题,通过逆向的方式来探讨这个问题。本文的所有环境都是在xp上的,IDE主要使用IDA 与 VC++ 6.0。为何不选更高版本的编译器,为何不在Windows 7或者更高版本的Windows上实验呢?我觉得主要是VC6更能体现程序的原始行为,想一些更高版本的VS 它可能会做一些优化与检查,从而造成反汇编生成的代码过于复杂不利于学习,当逆向的功力更深之后肯定得去分析新版本VS 生成的代码,至于现在,我的水平不够只能看看VC6 生成的代码 首先通过VC 6编写这么一个简单的程序
Masimaro
2018/10/10
2.2K0
VC 在调用main函数之前的操作
在调用API之前,你需要理解的LSTM工作原理
选自Analytics Vidhya 机器之心编译 作者:Pranjal Srivastava 参与:李泽南、蒋思源、黄小天 本文从 RNN 的局限性开始,通过简单的概念与详细的运算过程描述 LSTM 的基本原理,随后再通过文本生成案例加强对这种 RNN 变体的理解。LSTM 是目前应用非常广泛的模型,我们使用 TensorFlow 或 PyTorch 等深度学习库调用它甚至都不需要了解它的运算过程,希望本文能为各位读者进行预习或复习 LSTM 提供一定的帮助。 序列预测问题已经存在很长时间了。它被认为是数
机器之心
2018/05/10
1.5K0
我在 B 站,被喷了。。。
推荐阅读: 《我上班没有被卷死,没想到自由职业反而被卷死了。。。》 《滴滴大裁员。。。》 1 被喷了 大家好,我是纯洁的微笑。 自从春节以后,我开始正式的运营 B 站账号,到目前为止已经发布了 7 个视频,也积累了刚好超过 1000 个读者。 如果你平时也刷小破站,也可以手动关注一下,这是我的 B 站主页地址: https://space.bilibili.com/35292695 或者识别下面这个二维码,也可以直接到达: 最近我刚好录制了一个视频,主题是关于:一线城市,初中级程序员的真实面试过程。 这
纯洁的微笑
2022/03/04
3710
在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。
本文转载:http://blog.csdn.net/playing9c/article/details/7471918
跟着阿笨一起玩NET
2018/09/19
5.1K0
CA2302:在调用 BinaryFormatter.Deserialize 之前,确保设置 BinaryFormatter.Binder
调用或引用了 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 反序列化方法,但 Binder 属性可能为 NULL。
用户4268038
2022/02/26
1K0
由于不知道Git怎么删除之前错误的代码提交commit,我被开除了!
由于将重构任务和业务任务代码修改提交在了一个分支,为了不影响业务正常,必须删除重构提交。
JavaEdge
2021/02/23
8560
由于不知道Git怎么删除之前错误的代码提交commit,我被开除了!
Confluence 6 在升级之前
在这个指南中,我们将会与你一同对最新的 Confluence 站点在 Windows 或者 Linux 平台进行安装和更新。
HoneyMoose
2019/04/20
6320
Confluence 6 在升级之前
我在Gitee的几个开源项目被限制访问了
今天有同学反映,Gitee中是Spring Security教程的DEMO无法访问,非仓库人员访问会出现以下提示:
码农小胖哥
2022/05/22
1.4K0
我在Gitee的几个开源项目被限制访问了
java中的onresume_java – onActivityResult()之前调用onResume()?
isLoggedIn = prefs.getBoolean(“isLoggedIn”, false);
全栈程序员站长
2022/08/26
2890
flutter - 方法 '[]'在null上被调用,但在inApp中有效
这意味着检索数据需要很短的时间, 试试这个。数据为空时,它将在短时间内通过进度指示器
徐建国
2021/08/03
9900
我的老婆失业了,周围同事也在不断被裁。。。
来源:知乎 作者:黑石 今年 2 月,我的老婆失业了。好在是被裁的,有些补偿。裁的是整个部门,她一把拉扯大的团队十几个人全部被裁。刚开始他们拿到赔偿以后还欢呼雀跃,天天聚会,天天嗨。到现在过去两个多月了,没一个找到工作的。我已经感受到了一股鸡蛋被煎糊的焦虑感,空气中弥漫着「我是谁,我要去哪?」的哲学气息。 裁员赔偿这个事也得再说说,比如你在这家公司工作了 2 年,你应该会拿到 N+1=3 的赔偿,但这三个月并不是你的工资的三倍,而是最高为当地平均工资的三倍,杭州是 2 W出头,北京是 3 W,如果你的工资高
用户1564362
2022/05/18
4200
我的老婆失业了,周围同事也在不断被裁。。。
关于MVCC,我之前写错了,这次我改好了!
关于MVCC的原理,在《我想进大厂》之mysql夺命连环13问写过一次,但是当时写的其实并不准确,这个理解可以应付面试,帮助快速理解,但是他的真正实现原理我想再次拿出来说一说。
艾小仙
2021/03/02
4270
关于MVCC,我之前写错了,这次我改好了!
Confluence 6 在升级之前 原
在这个指南中,我们将会与你一同对最新的 Confluence 站点在 Windows 或者 Linux 平台进行安装和更新。
HoneyMoose
2019/04/29
5310
Confluence 6 在升级之前
                                                                            原
我发现我的数据被操纵了……
大数据文摘作品 作者:danah boyd 编译:糖竹子、白丁、Aileen 索引的完整性不再是决定搜索结果质量的唯一因素。用户感兴趣的搜索结果常常淹没在“垃圾结果”中。 ---- 引自Sergey Brin 和Larry Page的《解剖谷歌搜索原理》(1998年4月版) 当前,我们正目睹着一场数据被滥用的大剧。限制数据滥用并且努力解决偏见数据和问题数据,正成为解决科技对社会基石产生影响的重要条件。 简而言之,我认为大家应该重新考虑,安全、公平到底意味着什么。本文从三个方向告诉我们,在数据驱动的世界中,
大数据文摘
2018/05/24
5700
业界 | 成为CTO之前,我希望有人告诉我这些
大数据文摘作品 编译:赵逸云、Shan LIU 、蒋宝尚 如何成为一位合格的CTO,在成为CTO之前又需要哪些职业素养,即将离职的 SketchDeck CTO讲述他在过去四年担任此职位的经验。 这是一段刺激又美妙的体验,在创业公司工作与传统的任职大不相同:一开始,你完全不知道公司是否会成功,也不知道它会不会变成一份全职工作,之后,随着公司的发展,你体验着新的各不相同的职位。总的来说,你会经常做着你曾经从未做过的工作。在你还未充分利用手中的权力之前,新的责任已经来到了你的面前。 创业公司像大海中小船,能够灵
大数据文摘
2018/05/23
3180
Python 获取被调用函数名称,所处模块,被调用代码行
print(sys._getframe().f_code.co_filename)
授客
2019/09/11
2.6K0
Python 获取被调用函数名称,所处模块,被调用代码行
惊讶!我定的日志规范被CTO在全公司推广了
日志文件提供精确的系统记录,根据日志最终定位到错误详情和根源。日志的特点是,它描述一些离散的(不连续的)事件。例如:应用通过一个滚动的文件输出 INFO 或 ERROR 信息,并通过日志收集系统,存储到一些存储引擎(Elasticsearch)中方便查询。
猿天地
2019/12/25
8.8K0
惊讶!我定的日志规范被CTO在全公司推广了
还记得我之前的代码生成工具么,这次我给它升级了
我之前开发了一款定制化的代码生成工具,基于MyBatis Generator开发的。有有兴趣的可以看看我之前写的这篇文章:
Lvshen
2022/05/05
3920
还记得我之前的代码生成工具么,这次我给它升级了
点击加载更多

相似问题

在调用doOnComplete之前,如何等待完成doOnNext中的所有任务?

10

异步在我计划调用之前被调用。

13

我的函数在状态改变之前被调用

111

为什么对象的构造函数在键检查map::emplace之前被调用?

17

为什么我的render()函数在componentWillReceiveProps()之前被调用?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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