如何在 Kotlin 中创建 list/set 个函数

How to create list/set of functions in Kotlin

我在 java

中有此代码
// set of functions to transform int to String
private static final Set<IntFunction<String>> RULE_SET = new LinkedHashSet<IntFunction<String>>() {{
    add(i -> i % 2 == 0 ? "buzz" : "");
    add(i -> i % 3 == 0 ? "fizz" : "");
    add(i -> i % 4 == 0 ? "2gis" : "");
}};

//client code
private String transformNum(int num) {
    final String transformed = RULE_SET.stream()
            .map(rule -> rule.apply(num))
            .collect(Collectors.joining());
    return transformed.length() == 0 ? String.valueOf(num) : transformed;
}

现在我正在尝试将其转换为 Kotlin。 但我觉得创建函数集合有更简单、更容易的方法,你能指教一下吗?这就是我现在所拥有的。有效,但对我来说看起来很奇怪,就像我在 Kotlin 中使用 Java,而不是 Kotlin 本身。 :)

private val rules = setOf<IntFunction<String>>(
        IntFunction { i: Int -> if (i % 2 == 0) "buzz" else "" },
        IntFunction { i: Int -> if (i % 3 == 0) "fizz" else "" },
        IntFunction { i: Int -> if (i % 4 == 0) "2gis" else "" }
)

private fun transformNum(num: Int): String {
    val transformed = rules.joinToString("") { rule: IntFunction<String> ->
        rule.apply(num)
    }
    return if (transformed.isEmpty()) num.toString() else transformed
}



也许是这个?

val ss = setOf<(Int) -> String>(
     { i -> if (i%2 == 0) "apple" else ""},
     { i -> if (i%3 == 0) "banana" else ""},
     { i -> if (i%4 == 0) "cherry" else ""}
 )

private fun transform(num: Int): String = 
    ss.joinToString(""){ it(num) }
        .let {
            if (it.isEmpty()) num.toString() else it
        }

也许是这个?

private val rules = setOf(
        { i : Int -> if (i % 2 == 0) "buzz" else "" },
        { i : Int -> if (i % 3 == 0) "fizz" else "" },
        { i : Int -> if (i % 4 == 0) "2gis" else "" }
    )

private fun transformNum(num: Int) = rules.joinToString("") {it(num)}.run {
            if (isEmpty()) num.toString() else this
}