Kotlin 簡單優雅的高階函數
Kotlin 簡單優雅的高階函數
最新上架!!!《 Kotlin極簡教程》 陳光劍 (機械工業出版社)
可直接打開京東,淘寶,當當===> 搜索: Kotlin 極簡教程
https://www.jianshu.com/p/35b487734339
函數代表一種關係 f 的蘊涵邏輯流。這種蘊涵邏輯流,其實就是映射(Mapping)。
一切皆是映射。
我們說組合是編程的本質,其實,組合就是建立映射關係。
我們說,
程序 = 算法+數據結構
我們把程序看做圖論裏麵的一張圖G,這裏的數據結構就是圖G的節點Node, 而算法邏輯就是這些節點Node之間的Edge。整個的圖G就是一幅美妙的抽象邏輯之塔的 映射圖 。
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-09-14 09:33:24