用过c#的可能对 yield 关键字爱不释手,那么在像我这种被迫上java贼船的人,就想找到类似的功能。

我使用的是kotlin,下面的方法演示了产生一个序列的功能。

val fibonacciSeq = buildSequence {
var a =
var b = yield() while (true) {
yield(a + b) val tmp = a + b
a = b
b = tmp
}
} fun main(args: Array<String>){
fibonacciSeq.take().forEach {
println(it)
}
}

程序将执行50次然后退出。

实现枚举器

上面的代码使用的是序列功能,并非是常见的枚举器,下面的代码更像c#的枚举器。

class MyList : Iterable<Int>{
private val list = arrayOf(,,,,,) override fun iterator(): Iterator<Int> {
return buildIterator {
val size = list.size
for(i in until size) {
yield(list[i] + i)
}
}
}
} fun main(args: Array<String>){
val list = MyList()
for (p in list) {
println(p)
}
}

实现类似Linq

我们在使用Linq时可以将序列不断的变换,Kotlin也可以很方便的处理。

//将输入的数据 + 1
fun Do1(seq : Sequence<Int>) : Sequence<Int>{
return buildSequence {
for (i in seq){
yield(i + )
}
}
} //变换成字符串
fun Do2(seq : Sequence<Int>) : Sequence<String>{
return buildSequence {
for (i in seq){
yield("hello $i ")
}
}
} //将多个数据聚合到一个数据
fun Do3(seq : Sequence<String>) : Sequence<String>{
return buildSequence{
var result = ""
var count = for (i in seq){
result += i
count++
if(count == ){
yield(result)
result = ""
count =
}
} if(count > ){
yield(result)
}
}
} fun main(args: Array<String>){
val data = arrayOf(,,,,,,,)
val result = Do3(Do2(Do1(data.asSequence())))
for (p in result){
println(p)
}
}

Kotlin 使用类似C# 的yield功能的更多相关文章

  1. 实现类似mysql group_concat的功能

    实现类似mysql group_concat的功能 SELECT SG.Id ,SG.GroupName ,HostNames = STUFF((SELECT ',' + SH.[HostName] ...

  2. [CoffeeScript]使用Yield功能

    CoffeeScript 1.9 开始提供了类似ES6的yield关键字. 自己结合co和bluebird做了个试验. co -- http://npmjs.org/package/co  -- fo ...

  3. 利用原生JS实现类似浏览器查找高亮功能(转载)

    利用原生JS实现类似浏览器查找高亮功能 在完成 Navify 时,增加一个类似浏览器ctrl+f查找并该高亮的功能,在此进行一点总结: 需求 在.content中有许多.box,需要在.box中找出搜 ...

  4. WPF中类似使用tab键功能,可以向上向下定位

    原文:WPF中类似使用tab键功能,可以向上向下定位 private void tbYyrs_KeyUp(object sender, KeyEventArgs e) { UIElement elem ...

  5. mysql定时执行及延时执行,实现类似sql server waitfor功能

    熟悉SQL Server的人都知道,它有一个很有用的功能,waitfor time和waitfor delay,前者表示在某个时间执行,后者表示等待多长时间执行.在我们测试功能和定时执行的时候特别有用 ...

  6. 类似QQ侧滑菜单功能实现

    之前的那文章简单实现了菜单侧拉功能,但是做不到像QQ那样导航条和tabBar一起移动...之后在网上找资料,有了思路,就自个写了个demo试试水. 先创建QHLMainController控制器,并把 ...

  7. koa2 controller中实现类似sleep的延迟功能

    今天有同事问我如何在koa2中的controller中使用延迟执行的功能,他直接在controller中使用setTimeout,但是没效果. 错误的代码类似下面这样: // 错误的方法 export ...

  8. Kotlin 一个好用的新功能:Parcelize

    在开发中,如果有需要用到序列化和反序列化的操作,就会用到 Serializable 或者 Parcelable,它们各有优缺点,会适用于不同的场景. Serializable 的优点是实现简单,你只需 ...

  9. 编程实现类似Linux下cp功能

    MyCP的代码实现 一.题目要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bi ...

随机推荐

  1. pickel加速caffe读图

    64*64*3小图(12KB),batchSize=128,训练样本100万, 全部load进来内存受不了,load一次需要大半天 训练时读入一个batch,ali云服务器上每个batch读入时间1. ...

  2. python爬取指定新闻

    作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2894 给定一篇新闻的链接newsUrl,获取该新闻的全部信息 标题 ...

  3. 保存配置,获取配置,XML

    private void SaveSOConfig() { //保存配置 Dictionary<string, string> PrintConfigDIC = new Dictionar ...

  4. 类与对象 && 继承

      以下是本人的对类与对象.继承的一些理解,如有错误之处万望谅解,如有朋友愿意指正,十分乐意,万分感谢!   类与对象     类与对象是学习编程的基础(大概吧),那么何为类?何为对象呢?   一.简 ...

  5. 移动端js调试工具:eruda

    通常写前端页面都在Chrome浏览器的开发模式下进行调试,但是写放在移动端的H5页面时,有时候会遇到在Chrome上调试没有问题,但是在手机的浏览器上有问题的情况:或者有些功能只能在特定的容器中才能其 ...

  6. postman工具的使用

    https://www.cnblogs.com/rookie-c/p/5753948.html#4100341 https://www.jellythink.com/archives/category ...

  7. 创建局域网yum服务器

    首先需要安装createrepo这个软件包,使用yum安装即可 创建软件库文件夹,比如mkdir -p /var/www/html/myrepo/x86_64, 将软件包拷贝到文件夹下. cd到该文件 ...

  8. 含服务端,客户端,数据库的注册/登录/聊天/在线/离线查看的聊天demo

    用websocket,mysql,node的写了一个简单聊天的demo 实现了: 注册,登陆功能: 聊天信息广播: 在线/离线状态的查看: 服务端: 主要引用http,fs,mysql,socket. ...

  9. 工具类封装之--BaseController

    package cn.xxx.base; import cn.xxx.gecustomer.beans.GeCustomer; import cn.xxx.gecustomer.beans.GeCus ...

  10. ATS 相关

    启动命令 /usr/local/CCTS/bin/trafficserver   start |stop | restart 清盘 /usr/local/CCTS/bin/traffic_server ...