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 ...
随机推荐
- OxyPlot Controller OxyPlot控制器
Default input bindings The default input bindings in the PlotController are: Action Gesture Pan* Rig ...
- JS 画框操作
Js中,我们有时候需要对图片进行操作,包括画框,其实对于UI前端来说挺简单的,没有网上说的那样复杂,这里说明一下 <div style="width:80%;height:300px; ...
- Hadoop 进程配置总结
HDFS: NameNode: core-site.xml <property> <name>fs.defaultFS</name> <value>hd ...
- Java 中 this 和 super 的用法总结
his this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this 的用法在 Java 中大体可以分为3种: 1.普通的直接引用 这种就不用讲了,this 相当于是指向当 ...
- sqlserver可将字符转成数字再进行sum,如果varchar类型中存放的都是数字
sqlserver语法: select sum(cast(score as int)) as score from 表名; 注意:int是整型,在实际操作中根据自己需要的类型转换.
- Oracle初级优化sql
1.选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理, ...
- leetCode 字符串相关问题
125. 验证回文串 /* * 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. * 输入: "A man, a plan, a canal: Panama& ...
- Servlet CDI example analysis
上下文和依赖注入(CDI)使您的对象能够自动为它们提供依赖项,而不是创建它们或将它们作为参数接收.CDI还为您管理这些依赖项的生命周期. 例如,考虑以下servlet: @WebServlet(&qu ...
- UVA11996 Jewel Magic
思路 splay维护序列的hash值即可 因为有rev操作,还要维护反串的hash值 代码 #include <cstdio> #include <cstring> #incl ...
- opencv dlib caffe 安装
编译opencv记录 1.opencv,opencv_contrib包, 3.4.5版本 2. 到opencv/build 目录下 删除所有文件 $rm -rf * 3. 打开cmake图形界面 $c ...