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 ...
随机推荐
- 2018.2.22 学习笔记 random模块及每日一练
给你一个字符数,把它的每个字符之间加上一个空格,形成一个新字符串. 例如:I love FishC. 变成I l o v e F i s h C . 跟小甲鱼学编程 变成 跟 小 甲 鱼 学 ...
- STD函数的内部计算公式
各股票软件的标准差函数STD是不同的,而布林线的上下轨是以STD为基础计算出来的,所以使用布林线应小心.以2008/3/28的上证综指为例,利用如下代码:"收盘价3日STD:STD(CLOS ...
- vue实现验证码倒计时60秒的具体代码
vue实现验证码倒计时60秒的具体代码 <span v-show="show" @click="getCode">获取验证码</span> ...
- WdatePicker 日期区间设置
<input id="billsStartDate" name="billsStartDate" onclick="WdatePicker({d ...
- JS文件写法操作,DOM基本操作
js文件写法.规范 // 定义全局变量 var num = 0;//这个是用来记数的. // 页面加载完成 window.onload = funtion(){ intVar();//初始化变量 s ...
- Docker初始
如今Docker的使用已经非常普遍,特别在一线互联网公司.使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力.在云服务概念兴起之后,Docker的使用场景和范围进一步发展,如 ...
- Java 键盘输入数字(空格隔开) 将数字存入数组
Scanner sc = new Scanner(System.in); String inputString = sc.nextLine(); String stringArray[] = inpu ...
- SAP 查询分析器,查询报表自动生成,SQL查询测试实现说明(转)
在日常的SAP开发和应用中,经常需要通过查询SAP数据表来处理日常业务,比如:数据对账.报表SQL测试.SAP查询功能开发等.通过开发SAP查询分析器,SAP实施和开发人员,可以在较短的时间内查询到需 ...
- Python 框架化代码的学习
1 def 1: 2 pass 3 4 def 2: 5 pass 6 7 def 3: 8 pass 从Python初学我们习惯的风格就是如上图,把函数方法直接放到全局来写,这的确是最简单易懂的方式 ...
- Python3 tkinter基础 Text window 文本框中插入按钮
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...