colin
2022-01-13
String.clean() 使用顶层扩展好像不太合适,顶层扩展只适用于通用的逻辑,否则不清楚的人看着 idea 提示的扩展函数也一脸懵逼。
作者回复: 赞~很有道理。
13
A Lonely Cat
2022-01-12
fun main() { val word = "Kotlin is my favorite language. I love Kotlin!" val wordFrequencyList = word.clean() .participle() .countWordFrequency() .toList() .sortedByDescending { it.second } wordFrequencyList.forEach { println("word is ${it.first}, frequency is ${it.second}") } } /** * 文本清洗 */ private fun String.clean() = replace("[^A-Za-z]".toRegex(), " ") .trim() /** * 分词 */ private fun String.participle() = split(" ").toList() /** * 计算词频 */ private fun List<String>.countWordFrequency(): Map<String, Int> { val map = mutableMapOf<String, Int>() forEach { if (it.isNotBlank()) { val count = map.getOrDefault(it, 0) map[it] = count.plus(1) } } return map.toMap() }
展开
作者回复: 赞,可读性更好了。
6
奥特之光
2022-05-03
fun foo(block: () -> Unit) { block() } 从开始讲函数到这节课看完,我还没有发现有讲过->是什么意思,这里() -> Unit这让人很懵,然后下面这个block()和参数的block又是啥关系?
作者回复: “->”其实就是:参数类型、返回值类型,它们两者之间的分界线。
共 5 条评论
1
_
2022-04-24
没用过JMH,查了一下Score的含义,默认情况下是Throughput模式,Score代表单位时间内执行的操作次数,所以testInlined要比testNoninlined快10倍。 https://stackoverflow.com/questions/24928922/jmh-what-does-the-score-value-mean
作者回复: 是的
阿康
2022-01-12
在正式开始学习之前,我也建议你去 clone 我 GitHub 上面的 TextProcessor 工程:https://github.com/chaxiu/Calculator.git,然后用 IntelliJ 打开,并切换到 start 分支跟着课程一步步敲代码。 源码连接错了
作者回复: 被你发现了,马上改过来。感谢感谢。
郑峰
2022-07-25
One liner fun processText(text: String) = text.replace("[^A-Za-z]".toRegex(), " ").trim() .split(" ").filter(String::isNotBlank) .groupingBy { it }.eachCount() .map { WordFreq(it.key, it.value) } .sortedByDescending { it.freq }
1
ElleSky
2023-02-22
来自山东
如果方法变得足够大,过度使用 inline 可能会妨碍或停止 Hotspot 优化(例如方法内联)。默认情况下, Hotspot 不会内联大于35个字节的方法。内联高阶函数也得根据实际情况吧?
ElleSky
2023-02-08
来自山东
hi,你好呀,请问你这gif图是用的什么软件生成的呢?
晓春
2023-01-12
来自上海
Kotlin 最新 sortedByDescending 返回的是 List, sortByDescending 返回的是 Unit
熊妈饭团
2022-11-01
来自美国
为什么 inline mapToList 是private的method,当被拷贝到public area 执行时却不会报错呢?