Kotlin备忘录
Publié le 29 May 2022
好的链接
各种代码片段
映射 减少
将一列 bite 转换为一列 string 并汇总该 string 列表
在一个包含连接的字符串中 如何记录已发送的请求(requestBodyContent:byte[])
log.info(
requestBodyContent!!.map { it.toInt().toChar().toString() }
.reduce { request: String, s: String -> request + s }
)
枚举和密封类
�函数式接口和方法引用
可以将一个实体转换为DTO的领域模型,使用一个方法引用(函数式风格 - Java 8)
fun findAllByLoginNot(
pageable:Pageable,
login:String)
:Page<UserDto> {
return userDao.findAllByLoginNot(
pageable,
login).map(::fromEntity)
}
一https://stackoverflow.com/a/22245383/837404[良好的解释]
捕获标准输出
package functional
import java.io.ByteArrayOutputStream
import java.io.PrintStream
import java.lang.System.out
import java.lang.System.setOut
import kotlin.test.AfterTest
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals
class BasicsHOF {
private val standardOut: PrintStream? = out
private val outputStreamCaptor = ByteArrayOutputStream()
@BeforeTest
fun setUp() = setOut(PrintStream(outputStreamCaptor))
@AfterTest
fun tearDown() = setOut(standardOut)
@Test
fun `three times dope`() {
3.times { println("Hello") }
assertEquals(
buildString {
repeat(3) { append("Hello\n") }
deleteAt(length - 1)
}, outputStreamCaptor
.toString()
.trim()
)
}
fun Int.times(fn: () -> Unit) = (1..this).forEach { _ -> fn() }
}
在 Kotlin 中,apply、run、let、also、use 和 with 之间有什么区别?
Kotlin函数比较与Lambda形式使用参考
apply
run, let, also, use, et `with`它们提供了处理对象的不同方法。每种方式都有其特定的使用场景和行为。此外,lambda 引用形式可以通过引用现有的 lambda 函数来使代码更具可读性和可重用性。函数`apply`用于在创建对象时配置该对象。它返回调用它的对象。
示例与 lambda 引用:
val someObject = SomeClass().apply(::configureObject)
带 lambda 的示例:
val someObject = SomeClass().apply {
// configuration des propriétés de someObject
}
运行
函数`run`用于在对象上执行代码块并返回代码块的结果。
示例与 lambda 引用 :
val result = someObject.run(::someFunction)
示例 lambda :
val result = someObject.run {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}
let 等于
函数`let`用于在对象上执行代码块并返回该代码块的结果。
示例:lambda 引用
val result = someObject.let(::processObject)
示例使用 lambda :
val result = someObject.let {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}
也
功能`also`� 被用于对对象执行额外操作,并返回其被调用的对象。
示例带 lambda 引用 :
someObject.also(::performAdditionalAction)
带有 lambda 的示例 :
someObject.also {
// action additionnelle sur someObject
}
使用
�函数`use`用于在使用后必须关闭的资源上工作。它会自动调用该函数`close`在块的末尾。
示例 带 lambda 引用:
someResource.use(::useResource)
示例 带有 lambda :
someResource.use {
// travailler avec la ressource
}
与
功能`with`用于在对象上调用多个方法而无需重复其名称,并返回最后一个表达式的结果。
示例 与 lambda 引用 :
val result = with(someObject, ::processWithObject)
示例 使用 lambda :
val result = with(someObject) {
// appeler des méthodes sur someObject
// la dernière expression est renvoyée
}
使用 Lambda 引用形式或代码块`{}`, 您可以将逻辑封装到独立的函数中,从而提高代码的可读性和可重用性。
let Function 在 Kotlin
该功能`let`在 Kotlin 中,它被用于对对象执行操作并返回不同的结果。然而,需要注意的是该函数`let`它不会修改其被调用对象的初始状态。
签名 |
|
用法 |
�函数`let`常用于对对象应用变换并基于这些变换获得结果。 |
结果 |
函数返回的值`let`是传入的 lambda 表达式的结果,通常是对对象所进行操作的结果。 |
副作用 |
虽然该函数`let`它在用于 lambda 表达式时可能对对象产生副作用,但不会修改对象自身的初始状态。 |
因此,函数`let`这是一种优雅的方式,可以在对一个对象执行操作的同时获得派生结果,同时保持原始对象的完整性。