
Kotlin 简单优雅的高阶函数
发布日期:2021-05-04 16:20:18
浏览次数:9
分类:技术文章
本文共 2339 字,大约阅读时间需要 7 分钟。
Kotlin 简单优雅的高阶函数
最新上架!!!《 Kotlin极简教程》 陈光剑 (机械工业出版社)
可直接打开京东,淘宝,当当===> 搜索: Kotlin 极简教程
函数代表一种关系 f 的蕴涵逻辑流。这种蕴涵逻辑流,其实就是映射(Mapping)。
一切皆是映射。
我们说组合是编程的本质,其实,组合就是建立映射关系。
我们说,
程序 = 算法+数据结构
我们把程序看做图论里面的一张图G,这里的数据结构就是图G的节点Node, 而算法逻辑就是这些节点Node之间的Edge。整个的图G就是一幅美妙的抽象逻辑之塔的 映射图 。

image.png
1 . Kotlin 函数式编程: 函数的组合。一切皆是函数。
fun main(args: Array) { val h = h(::g, ::f) val strList = listOf("a", "ab", "abc","abcd","abcde","abcdef","abcdefg") // 非常好用的流式 API filter,flat,map 等等 val mstrList = strList.filter(h) println(mstrList) mstrList.forEachIndexed{ index,value -> println("$value = ${value.length}") }}// 简单好用的 Kotlin 类型别名typealias G=(String) -> Inttypealias F=(Int) -> Booleantypealias H=(String) -> Boolean// 简单直接的函数定义fun f(x: Int) = x % 2 != 0fun g(s: String) = s.length// 简单优雅的高阶函数定义(复合函数): compose(f, g) = f(g(*))fun h( g: G, f: F): H { return { x -> f(g(x)) }}
2. 简单好用的 Kotlin 类型别名
typealias G=(String) -> Inttypealias F=(Int) -> Booleantypealias H=(String) -> Boolean
3. 非常好用的流式 API filter,flat,map 等等
val mstrList = strList.filter(h)mstrList.forEachIndexed{ index,value -> println("$value = ${value.length}") }
4. 简单优雅的高阶函数定义(复合函数): compose(f, g) = f(g(*))
组合函数返回传递给它的两个函数的组合: (f、g) = f (g (*))。
现在, 您可以将其应用于可调用引用。fun h( g: G, f: F): H { return { x -> f(g(x)) }}
val h = h(::g, ::f) val strList = listOf("a", "ab", "abc","abcd","abcde","abcdef","abcdefg") // 非常好用的流式 API filter,flat,map 等等 val mstrList = strList.filter(h)
同样的逻辑,我们在 Java 8中的实现代码是:
package com.easy.kotlin;import java.util.ArrayList;import java.util.Arrays;import java.util.List;interface G { Integer apply(String s);}interface F { Boolean apply(Integer x);}interface H { Boolean apply(String s);}public class InterfaceInvokeDemo { public static void main(String[] args) { G g = (s) -> s.length(); F f = (x) -> x % 2 != 0; H h = (s) -> f.apply(g.apply(s)); Liststrings = Arrays.asList(new String[] {"a", "ab", "abc", "abcd", "abcde", "abcdef", "abcdefg"}); List result = new ArrayList(); for (String s : strings) { if (h.apply(s)) { result.add(s); } } System.out.println(result); }}
5. 参考书籍:

螢幕快照 2017-08-31 10.19.58.png

螢幕快照 2017-08-31 10.20.19.png
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月17日 09时33分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Delphi 选择文件之OpenDialog【并添加至Image】
2019-03-01
并发控制
2019-03-01
A - 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历(BFS)
2019-03-01
《软件方法》第1章 建模和UML
2019-03-01
Rhapsody的文件能转到EA里面吗
2019-03-01
android instant app
2019-03-01
ubuntu非root用户如何访问vmware共享文件夹
2019-03-01
图解HTTP (chap4 Http状态码) 5XX
2019-03-01
Python3实现程序更新
2019-03-01
类似愤怒小鸟的飞行弹道
2019-03-01
【今日CV 计算机视觉论文速览 第97期】Tue, 9 Apr 2019
2019-03-01
【mAP】关于目标检测mAP的一些理解
2019-03-01
庄子:谁知南华秋水意?
2019-03-01
android 在一个应用中启动另一个应用
2019-03-01
Thread.sleep() 和 Thread.yield() 区别
2019-03-01
Kotlin 简单优雅的高阶函数
2019-03-01
ES6 箭头函数: () => {} 与匿名函数 function() {}
2019-03-01