前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kotlin 简单优雅的高阶函数Kotlin 简单优雅的高阶函数《Kotlin极简教程》正式上架:1 . Kotlin 函数式编程: 函数的组合。一切皆是函数。2. 简单好用的 Kotlin 类型别名

Kotlin 简单优雅的高阶函数Kotlin 简单优雅的高阶函数《Kotlin极简教程》正式上架:1 . Kotlin 函数式编程: 函数的组合。一切皆是函数。2. 简单好用的 Kotlin 类型别名

作者头像
一个会写诗的程序员
发布2018-08-17 14:55:10
9290
发布2018-08-17 14:55:10
举报

Kotlin 简单优雅的高阶函数

非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎随时与我交流~

函数代表一种关系 f 的蕴涵逻辑流。这种蕴涵逻辑流,其实就是映射(Mapping)。

一切皆是映射。

我们说组合是编程的本质,其实,组合就是建立映射关系。

我们说,

程序 = 算法+数据结构

我们把程序看做图论里面的一张图G,这里的数据结构就是图G的节点Node, 而算法逻辑就是这些节点Node之间的Edge。整个的图G就是一幅美妙的抽象逻辑之塔的 映射图 。

image.png

1 . Kotlin 函数式编程: 函数的组合。一切皆是函数。

fun main(args: Array<String>) {
    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) -> Int
typealias F=(Int) -> Boolean
typealias H=(String) -> Boolean

// 简单直接的函数定义
fun f(x: Int) = x % 2 != 0
fun 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) -> Int
typealias F=(Int) -> Boolean
typealias 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));

        List<String> strings = Arrays.asList(new String[] {"a", "ab", "abc", "abcd", "abcde", "abcdef", "abcdefg"});
        List<String> 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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Kotlin 简单优雅的高阶函数
  • 1 . Kotlin 函数式编程: 函数的组合。一切皆是函数。
  • 2. 简单好用的 Kotlin 类型别名
  • 3. 非常好用的流式 API filter,flat,map 等等
  • 4. 简单优雅的高阶函数定义(复合函数): compose(f, g) = f(g(*))
  • 5. 参考书籍:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档