36. 常用的高阶函数

作者: 厚土火焱 | 来源:发表于2017-11-27 11:44 被阅读43次

forEach 、map

利用 forEach 和 map 对数组进行操作

package com.cofox.kotlin.mydo.HeighterCodeFunction

import java.util.function.IntToDoubleFunction

/**
 * chapter01
 * @Author:  Jian Junbo
 * @Email:   junbojian@qq.com
 * @Create:  2017/11/26 16:36
 * Copyright (c) 2017 Jian Junbo All rights reserved.
 *
 * Description:
 */

fun main(args: Array<String>) {
    val list = listOf(1,2,3,4,5,6,7)
    val newList = list.map {
        it * 2 + 3
    }
    val newList2 = list.map(Int::toDouble)
    newList.forEach(::println)
    newList2.forEach(::println)
}

可以利用 map 对数组的元素进行运算和编辑。然后利用 forEach 遍历并 println。
运行结果

5
7
9
11
13
15
17
1.0
2.0
3.0
4.0
5.0
6.0
7.0

数组本身也有可能更复杂一点

    val list = listOf(
            1..10,
            2..5,
            1017..1028
    )

这是一个内部有三个序列的数组。
通常我们这样来把这个数组扁平化。

    val flatlistUsually = list.flatMap { 
        it.map { 
            "No.$it"
        }
    }

不过,这里面的 2 个 it 并不是同一个东西。我们可以写的更清晰一些。

    val flatlist = list.flatMap { intRange ->
        intRange.map { intElement ->
            "No.$intElement"
        }
    }

现在看出来了,2 个 it,是包含关系,这里用 intRange 和 intElement 来区分。

reduce,joinToString

简单的输出

    println(flatlist)
    val flatlist2 = list.flatMap { it }
    val reducelist = flatlist2.reduce { acc, i -> acc + i }
    println(reducelist)
    println((1..5).joinToString(","))

可以直接输出。
也可以生成新数组,然后对新数组使用 reduce 来进行数组元素的运算。
而joinToString是一个简单好用的小函数。

fold,foldRight,filter,filterIndexed,takeWhile

可以按顺序和倒序来显示数据

/**阶乘*/
fun factorial(n: Int): Int {
    if (n == 0) return 1
    return (1..n).reduce { acc, i -> acc * i }
}

    //顺序
    println((0..6).map(::factorial).fold(StringBuilder()) { acc, i -> acc.append(i).append(",") })
    //倒序
    println((0..6).map(::factorial).foldRight(StringBuilder()) { i, acc -> acc.append(i).append(",") })

可以对数组元素进行过滤

    //过滤偶数
    println((0..6).map(::factorial).filter { it % 2 == 0 })

可以对指定数组元素位置进行过滤

    //过滤奇数位置上的数字
    println((0..6).map(::factorial).filterIndexed { index, i -> index % 2 == 1 })

可以按照条件运行到条件失效

    //取得符合条件的,当不符合条件就停止
    println((0..6).map(::factorial).takeWhile { it % 2 == 1 })

更多的需要长期的探索和学习了。
完整代码

package com.cofox.kotlin.mydo.HeighterCodeFunction

/**
 * chapter01
 * @Author:  Jian Junbo
 * @Email:   junbojian@qq.com
 * @Create:  2017/11/26 17:00
 * Copyright (c) 2017 Jian Junbo All rights reserved.
 *
 * Description: flatmap
 */
fun main(args: Array<String>) {
    val list = listOf(
            1..10,
            2..5,
            1017..1028
    )
    val flatlist = list.flatMap { intRange ->
        intRange.map { intElement ->
            "No.$intElement"
        }
    }
    val flatlistUsually = list.flatMap {
        it.map {
            "No.$it"
        }
    }
    println(flatlist)
    val flatlist2 = list.flatMap { it }
    val reducelist = flatlist2.reduce { acc, i -> acc + i }
    println(reducelist)
    println((1..5).joinToString(","))
    //顺序
    println((0..6).map(::factorial).fold(StringBuilder()) { acc, i -> acc.append(i).append(",") })
    //倒序
    println((0..6).map(::factorial).foldRight(StringBuilder()) { i, acc -> acc.append(i).append(",") })
    //过滤偶数
    println((0..6).map(::factorial).filter { it % 2 == 0 })
    //过滤奇数位置上的数字
    println((0..6).map(::factorial).filterIndexed { index, i -> index % 2 == 1 })
    //取得符合条件的,当不符合条件就停止
    println((0..6).map(::factorial).takeWhile { it % 2 == 1 })

}

/**阶乘*/
fun factorial(n: Int): Int {
    if (n == 0) return 1
    return (1..n).reduce { acc, i -> acc * i }
}

运行结果

[No.1, No.2, No.3, No.4, No.5, No.6, No.7, No.8, No.9, No.10, No.2, No.3, No.4, No.5, No.1017, No.1018, No.1019, No.1020, No.1021, No.1022, No.1023, No.1024, No.1025, No.1026, No.1027, No.1028]
12339
1,2,3,4,5
1,1,2,6,24,120,720,
720,120,24,6,2,1,1,
[2, 6, 24, 120, 720]
[1, 6, 120]
[1, 1]

相关文章

  • 36. 常用的高阶函数

    forEach 、map 利用 forEach 和 map 对数组进行操作 可以利用 map 对数组的元素进行运算...

  • wangyanhua--python2

    基本函数的使用 匿名函数 常用系统高阶函数 高阶函数 常用系统高阶函数 Python递归 安装第三方库 三国小说人...

  • Swift(二)高阶函数

    @TOC swift常用高阶函数 swift中比较常用的高阶函数有:map、flatMap、filter、redu...

  • Python高阶函数

    本文要点 1.什么是高阶函数 2.python中有哪些常用的高阶函数 什么是高阶函数? 在了解什么是高阶函数之前,...

  • swift常用高阶函数基本用法

    swift中比较常用的高阶函数有:map、flatMap、filter、reduce。使用高阶函数可以简化代码量,...

  • 函数进阶_2

    目录 常用内置函数 匿名函数 高阶函数 闭包 装饰器 1. 常用内置函数 1.1 range()函数 语法:ran...

  • Kotlin学习之常用高阶函数:filter

    Kotlin学习之常用高阶函数:filter Kotlin高阶函数一般是数组、集合、序列等数据结构的扩展函数,接收...

  • Learn Python 3:高阶函数

    把函数作为参数传入,这样的函数称为高阶函数 以下是常用的高阶函数: 1、map 一般情况map()函数接收两个参数...

  • Swift常用高阶函数

    Swift常用高阶函数[https://juejin.cn/post/7016615807215992863]

  • 常用高阶函数

    sorted() sorted 本身是一个高阶函数,它可以传入一个函数,来对要排序的对象进行一次运算,运算的结果会...

网友评论

    本文标题:36. 常用的高阶函数

    本文链接:https://www.haomeiwen.com/subject/oubrbxtx.html