将 Single<Boolean> 转换为布尔值 (Kotlin)

Posted

技术标签:

【中文标题】将 Single<Boolean> 转换为布尔值 (Kotlin)【英文标题】:Convert Single<Boolean> to Boolean (Kotlin) 【发布时间】:2019-04-05 11:48:32 【问题描述】:

我有一个可变的实时数据,用于调整布局中的可见性(使用绑定适配器)。我使用实时数据的布尔值通过下面的代码来实现这一点。

@BindingAdapter("viewVisibility")
fun setVisibility(view: View, visible: Boolean) 
    view.visibility = if (visible) View.VISIBLE else View.GONE

要获取此数据,我使用以下方法

   Flowable.just(
Sdk().searchContact(CHATBOT_NAME)).map !(it.isEmpty()) 

it.isEmpty() 给了我一个 Flowable > 而不是 Flowable,我想将此 Single 转换为布尔值(将其作为参数提供给我的绑定适配器)但我找不到方法转换它。我的临时(可能是坏的)解决方案如下。

  it.blockingLast().isEmpty() // Blocking last gives me a list so I can get non-single boolean with isEmpty. Since I need one element from search contact method blocking last or first works same in this case.

这是一个可接受的解决方案吗?如何将 Single 转换为普通布尔值?

【问题讨论】:

` 给了我一个 Flowable> 而不是 Flowable` - 你是什么意思? 似乎 *** 删除了 " 【参考方案1】:

又是我,试试下面的代码:

fun doesExist(): Flowable<Boolean> 
   return Flowable.just(Single.just(Sdk().searchContact(CHATBOT_NAME)).map it.isEmpty()).map it.blockingGet() 

【讨论】:

我要在一个小时内试试这个。顺便问一下,Flowable.just 之后附加 Single.just 的目的是什么?我认为没有必要,因为方法仍然返回 Single 没有它。 single.just 和 flowable.just 有不同的行为吗? 因为你想要 Single 在最后一个问题之前,如果你不需要,那么删除 Single.just 代码将是 Flowable.just(ArrayList()).map it.isEmpty() 已接受。旁注:似乎使用阻塞获取与 androidscheduler 会导致问题。 ***.com/questions/46614494/… 是的,如果您的操作很耗时,那么您不应该在主线程中执行此操作,您可以使用 Schedulers.io() 代替 Androidschedulers.main

以上是关于将 Single<Boolean> 转换为布尔值 (Kotlin)的主要内容,如果未能解决你的问题,请参考以下文章

将 Single<List<Maybe<Book>>> 转换为 Single<List<Book>>

delphi RGB 转 HSV

用于将 Single<[Element]> 转换为 Observable<Element> 的 rxSwift 扩展

如何以较少的费用从 java 中的方法返回两个值(1.Collection,2.Single Boolean 值)?

Boolean函数将字符串转布尔值

将 List<boolean> 转换为字符串