草庐IT

3.5 Streams-笔记

流对现实世界事物建模时,由于事物中存在随时间变化的状态,目前只能通过赋值和可变对象实现。虽然可以解决建模的问题,但由于赋值的引入带来了许多棘手的问题,于是我们亟需一种既能完成建模需求,又不使用赋值操作(避免赋值操作带来的问题)的方法。这种新的解决方案为数据结构——流(streams)。从数据抽象的角度出发,流与列表是一致的,但列表在数据规模增大时会极大消耗计算资源。因为在列表的流式操作中(filter、map、accumulate等操作)需要不断拷贝和生成新的全量列表,在最终只需要其中少量数据参与计算的情况下,这种代价是巨大的。所以流与列表的不同之处在于它能够延迟计算(或者说按需计算),当元素

kotlin<第八篇>:协程的启动与取消

一、启动构建器launch与async构建器都用来启动新协程:1、launch,返回一个Job,并且不附带任何结果值2、async,返回一个Deferred,Deferred也是一个Job,可以使用.await()在一个延期的值上得到它的最终结果。等待一个作业:1、线程切换launch(Dispatchers.Default){println("1")withContext(Dispatchers.IO){delay(1000)println("2")}println("3")}withContext实现`异步线程同步化`,打印顺序是:1232、joinvaljob=launch{delay(

kotlin<第八篇>:协程的启动与取消

一、启动构建器launch与async构建器都用来启动新协程:1、launch,返回一个Job,并且不附带任何结果值2、async,返回一个Deferred,Deferred也是一个Job,可以使用.await()在一个延期的值上得到它的最终结果。等待一个作业:1、线程切换launch(Dispatchers.Default){println("1")withContext(Dispatchers.IO){delay(1000)println("2")}println("3")}withContext实现`异步线程同步化`,打印顺序是:1232、joinvaljob=launch{delay(