log.info(
requestBodyContent!!.map { it.toInt().toChar().toString() }
.reduce { request: String, s: String -> request + s }
)
29 mai 2022
Convertir une list de bite vers une list de string et résumer la list de string
dans une string contenant la concatenation.
Comment logger la request envoyé(requestBodyContent:byte[])
log.info(
requestBodyContent!!.map { it.toInt().toChar().toString() }
.reduce { request: String, s: String -> request + s }
)
On peut transformer une entité en model domain de dto avec un methode reference(functionnal style- java 8)
fun findAllByLoginNot(
pageable:Pageable,
login:String)
:Page<UserDto> {
return userDao.findAllByLoginNot(
pageable,
login).map(::fromEntity)
}
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() }
}
Comparaison des fonctions Kotlin et Utilisation des Formes Lambda Reference
Les fonctions Kotlin apply
, run
, let
, also
, use
, et with
offrent des moyens différents de traiter les objets. Chacune a ses propres cas d’utilisation et comportements. En outre, les formes lambda reference permettent de rendre le code plus lisible et réutilisable en faisant référence à des fonctions lambda existantes.
La fonction apply
est utilisée pour configurer un objet pendant sa création. Elle retourne l’objet sur lequel elle est appelée.
Exemple avec lambda reference :
val someObject = SomeClass().apply(::configureObject)
Exemple avec lambda :
val someObject = SomeClass().apply {
// configuration des propriétés de someObject
}
La fonction run
est utilisée pour exécuter un bloc de code sur un objet et retourne le résultat du bloc de code.
Exemple avec lambda reference :
val result = someObject.run(::someFunction)
Exemple avec lambda :
val result = someObject.run {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}
La fonction let
est utilisée pour exécuter un bloc de code sur un objet et retourne le résultat du bloc de code.
Exemple avec lambda reference :
val result = someObject.let(::processObject)
Exemple avec lambda :
val result = someObject.let {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}
La fonction also
est utilisée pour effectuer une action additionnelle sur un objet et retourne l’objet sur lequel elle est appelée.
Exemple avec lambda reference :
someObject.also(::performAdditionalAction)
Exemple avec lambda :
someObject.also {
// action additionnelle sur someObject
}
La fonction use
est utilisée pour travailler avec des ressources qui doivent être fermées après utilisation. Elle appelle automatiquement la fonction close
à la fin du bloc.
Exemple avec lambda reference :
someResource.use(::useResource)
Exemple avec lambda :
someResource.use {
// travailler avec la ressource
}
La fonction with
est utilisée pour appeler plusieurs méthodes sur un objet sans répéter son nom et retourne le résultat de la dernière expression.
Exemple avec lambda reference :
val result = with(someObject, ::processWithObject)
Exemple avec lambda :
val result = with(someObject) {
// appeler des méthodes sur someObject
// la dernière expression est renvoyée
}
En utilisant les formes lambda reference ou les blocs {}
, vous pouvez encapsuler la logique dans des fonctions distinctes, améliorant ainsi la lisibilité et la réutilisabilité du code.
La fonction let
en Kotlin est utilisée pour effectuer des opérations sur un objet et renvoyer un résultat différent. Cependant, il est important de noter que la fonction let
ne modifie pas l’état initial de l’objet sur lequel elle est appelée.
Signature |
---|
|
Usage |
---|
La fonction |
Résultat |
---|
La valeur renvoyée par la fonction |
Effets de Bord |
---|
Bien que la fonction |
Ainsi, la fonction let
est une façon élégante d’effectuer des opérations sur un objet tout en obtenant un résultat dérivé, tout en préservant l’intégrité de l’objet d’origine.