kotlin - 如何在 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
}
推荐阅读
- google-cloud-platform - 最佳实践 GCP - GKE | 多种服务
- r - 如何根据来自另一个 data.frame 的信息更新一个 data.frame
- macos - 如何修复“zsh:找不到命令:vue”?
- ssh - Vagrant:登录没有 ssh 私钥的用户帐户
- rxjs - 订阅 observable 后点击
- python - 如何在两个图像类别(二进制)上重用具有多个图像类别的预训练模型
- c++ - 如何在 NS-3 或 DCE-NS-3 中获取当前数据速率或可用带宽值?
- keras - Keras fit 与 fit_generator 额外的 smaples
- list - 我可以将 Moshi @JsonQualifier 应用于类型参数吗?
- html - 使用 Tika 从文本文件 XML、HTML 等中提取文本