Kotlin 使用类似C# 的yield功能
用过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功能的更多相关文章
- 实现类似mysql group_concat的功能
实现类似mysql group_concat的功能 SELECT SG.Id ,SG.GroupName ,HostNames = STUFF((SELECT ',' + SH.[HostName] ...
- [CoffeeScript]使用Yield功能
CoffeeScript 1.9 开始提供了类似ES6的yield关键字. 自己结合co和bluebird做了个试验. co -- http://npmjs.org/package/co -- fo ...
- 利用原生JS实现类似浏览器查找高亮功能(转载)
利用原生JS实现类似浏览器查找高亮功能 在完成 Navify 时,增加一个类似浏览器ctrl+f查找并该高亮的功能,在此进行一点总结: 需求 在.content中有许多.box,需要在.box中找出搜 ...
- WPF中类似使用tab键功能,可以向上向下定位
原文:WPF中类似使用tab键功能,可以向上向下定位 private void tbYyrs_KeyUp(object sender, KeyEventArgs e) { UIElement elem ...
- mysql定时执行及延时执行,实现类似sql server waitfor功能
熟悉SQL Server的人都知道,它有一个很有用的功能,waitfor time和waitfor delay,前者表示在某个时间执行,后者表示等待多长时间执行.在我们测试功能和定时执行的时候特别有用 ...
- 类似QQ侧滑菜单功能实现
之前的那文章简单实现了菜单侧拉功能,但是做不到像QQ那样导航条和tabBar一起移动...之后在网上找资料,有了思路,就自个写了个demo试试水. 先创建QHLMainController控制器,并把 ...
- koa2 controller中实现类似sleep的延迟功能
今天有同事问我如何在koa2中的controller中使用延迟执行的功能,他直接在controller中使用setTimeout,但是没效果. 错误的代码类似下面这样: // 错误的方法 export ...
- Kotlin 一个好用的新功能:Parcelize
在开发中,如果有需要用到序列化和反序列化的操作,就会用到 Serializable 或者 Parcelable,它们各有优缺点,会适用于不同的场景. Serializable 的优点是实现简单,你只需 ...
- 编程实现类似Linux下cp功能
MyCP的代码实现 一.题目要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bi ...
随机推荐
- pickel加速caffe读图
64*64*3小图(12KB),batchSize=128,训练样本100万, 全部load进来内存受不了,load一次需要大半天 训练时读入一个batch,ali云服务器上每个batch读入时间1. ...
- python爬取指定新闻
作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2894 给定一篇新闻的链接newsUrl,获取该新闻的全部信息 标题 ...
- 保存配置,获取配置,XML
private void SaveSOConfig() { //保存配置 Dictionary<string, string> PrintConfigDIC = new Dictionar ...
- 类与对象 && 继承
以下是本人的对类与对象.继承的一些理解,如有错误之处万望谅解,如有朋友愿意指正,十分乐意,万分感谢! 类与对象 类与对象是学习编程的基础(大概吧),那么何为类?何为对象呢? 一.简 ...
- 移动端js调试工具:eruda
通常写前端页面都在Chrome浏览器的开发模式下进行调试,但是写放在移动端的H5页面时,有时候会遇到在Chrome上调试没有问题,但是在手机的浏览器上有问题的情况:或者有些功能只能在特定的容器中才能其 ...
- postman工具的使用
https://www.cnblogs.com/rookie-c/p/5753948.html#4100341 https://www.jellythink.com/archives/category ...
- 创建局域网yum服务器
首先需要安装createrepo这个软件包,使用yum安装即可 创建软件库文件夹,比如mkdir -p /var/www/html/myrepo/x86_64, 将软件包拷贝到文件夹下. cd到该文件 ...
- 含服务端,客户端,数据库的注册/登录/聊天/在线/离线查看的聊天demo
用websocket,mysql,node的写了一个简单聊天的demo 实现了: 注册,登陆功能: 聊天信息广播: 在线/离线状态的查看: 服务端: 主要引用http,fs,mysql,socket. ...
- 工具类封装之--BaseController
package cn.xxx.base; import cn.xxx.gecustomer.beans.GeCustomer; import cn.xxx.gecustomer.beans.GeCus ...
- ATS 相关
启动命令 /usr/local/CCTS/bin/trafficserver start |stop | restart 清盘 /usr/local/CCTS/bin/traffic_server ...