println(it!!.length) // 如果 str 为 null, } } /** * Exception in thread "main" java.lang.NullPointerException * at MainKt.main(main.kt:4) * at MainKt.main(main.kt) * */ 所以必须使用 ?.let 处理可空对象 链式操作与默认值处理 结合Elvis
firstFlow.map { it +2 }.collect { println(it) } 利用map操作符对数据进行了 +2 处理,这样最后输出就是3,4了。这里的map和我们平时使用的集合操作符map是一个含义,用法也是一样的,所以用到Flow上会看起来非常自然,没有陌生感。除了map以外,还有...
LazyThreadSafetyMode.SYNCHRONIZED:lazy开启同步锁,同一时刻只允许一个线程对lazy属性进行初始化,默认使用该模式,线程安全的 LazyThreadSafetyMode.PUBLICATION:确认该属性可以并行执行,没有线程安全问题,可以使用该模式 LazyThreadSatetyMode.NONE:不会有线程方面的开销,但也不会有任何线程安全的保证 val sex: String by ...
Thread[pool-1-thread-1,5,main]1 Thread[pool-1-thread-1,5,main]4 Thread[pool-1-thread-2,5,main]2 Thread[pool-1-thread-1,5,main]3 Thread[pool-1-thread-3,5,main]5. kotlin.Unit Thread[main,5,main]6 Thread[main,5,main]end 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12....
那ThreadLocal呢?答案是不可以。在同一个调度下,我们无法指定协程会运行在线程池哪个线程上。所以根植于线程的ThreadLocal是无法保证效果的。kotlin为我们提供了ThreadLocal.asContextElement()扩展函数实现协程局部数据。 模式匹配 在java中,提到“模式匹配“,往往会被引入到正则表达式匹配上。实际上,在很多近几年语言...
Flow 是一个异步数据流,它可以顺序地发出数据,通过流上的一些中间操作得出结果;若出错可抛出异常。这些 “流上的中间操作” 包括但不限于map、filter、take、zip等等方法。这些中间操作是链式的,可以在后面再次添加其他操作方法,并且也不是挂起函数,它们只是构建了一条链式的操作并实时返回结果给后面的操作步骤。
){super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 携程中调用挂起函数返回一个 Flow 异步流runBlocking{println("流收集时的协程上下文 : ${Thread.currentThread().name}")// 调用 Flow#collect 函数, 可以获取在异步流中产生的元素flowFunction().collect{// 每隔 500ms 即可拿到...
Exception in thread "main" kotlin.KotlinNullpointException 最好避免在同一行中使用多个!!断言 let函数 let函数让处理可空表达式变得更容易;和安全调用运算符一起,允许对表达式求值,检查求值结果是否为null,把结果保存为一个变量 funsendEmail(email:String){...}valemail:String?=...sendEmail(email)ERROR:typemi...
// Inferred type: Map<String, Int> Map<String, Int>的泛型类型是从传递给Pair构造函数的参数的类型推断出来的。我们可能会想知道,如果用于创建map的推断类型的对不同会发生什么?第一对是Pair<String, Int>,第二对是Pair<String, String>: var map = mapOf("Mount Everest" to 8848, "K2" to "4017"...
emit("hello world${Thread.currentThread()}") }.map { "$it1" }.collect { println("$it") } } } map内部封装了transform。 过滤操作符 有个需求,对上流的数据进行某种条件的筛选过滤。 有了transform的经验,我们很容易想到定义扩展函数返回新的Flow,...