各种代码片段

映射 减少

将一列 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

介绍 Kotlin 函数`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) 是否返回带有副作用的对象,还是返回其初始输入状态(取决于函数 let)?

该功能`let`在 Kotlin 中,它被用于对对象执行操作并返回不同的结果。然而,需要注意的是该函数`let`它不会修改其被调用对象的初始状态。

签名

inline fun <T, R> T.let(block: (T) → R): R

用法

�函数`let`常用于对对象应用变换并基于这些变换获得结果。

结果

函数返回的值`let`是传入的 lambda 表达式的结果,通常是对对象所进行操作的结果。

副作用

虽然该函数`let`它在用于 lambda 表达式时可能对对象产生副作用,但不会修改对象自身的初始状态。

因此,函数`let`这是一种优雅的方式,可以在对一个对象执行操作的同时获得派生结果,同时保持原始对象的完整性。

相关文章