본문 바로가기

kotlin21

[Kotlin] Collection - Fold, Reduce 참고 : https://kotlinlang.org/docs/collection-aggregate.html#fold-and-reduce Fold와 Reduce는 컬렉션 요소들의 연산결과를 누적해서 다음 연산에서 사용한다. 차이점은 Reduce는 처음 연산 때 첫번째, 두번째 element를 가져와서 연산을 하는 반면, Fold는 init 인자와 첫번째 element를 가져와서 연산을 한다. val list = listOf(1, 2, 3, 4, 5) list.reduce { prev, ele -> println("$prev, $ele") (prev + ele) } // 1, 2 // 3, 3 // 6, 4 // 10, 5 list.fold(0) { prev, ele -> println("$prev, $ele.. 2022. 1. 16.
[Kotlin] Collection - associateBy, associateWith, associate AssociateBy collection 요소에 파라미터 함수에서 반환된 값을 키 값, 요소를 value로 하는 map을 반환한다. data class Member( val no: Int, val name: String ) fun main() { val members = listOf( Member(no=10, name="A"), Member(no=20, name="B"), Member(no=30, name="C"), Member(no=40, name="D"), Member(no=50, name="E"), ) val associateMembers = members.associateBy{it.no} println(""" ${associateMembers::class.simpleName} keys : ${as.. 2021. 12. 30.
[Kotlin] Collection - all, any, count, find All collection 의 원소들이 모두 조건을 만족하는지 println(""" 모든 원소가 조건을 만족하는지 홀수인지 [1, 3, 5, 7] : ${listOf(1, 3, 5, 7).all{ it%2 == 1 }} 홀수인지 [1, 3, 5, 7, 8] : ${listOf(1, 3, 5, 7, 8).all{ it%2 == 1 }} """.trimIndent()) 모든 원소가 조건을 만족하는지 홀수인지 [1, 3, 5, 7] : true 홀수인지 [1, 3, 5, 7, 8] : false Any collection 안에 조건을 만족하는 원소가 존재하는지 println(""" 홀수가 있는지 [1, 3, 5, 6] : ${listOf(1, 3, 5, 6).any{ it%2 == 0 }} [1, 3, 5] .. 2021. 12. 29.
[Kotlin] Sealed Class Sealed Class 의 구현체들은 컴파일 시간에 알 수 있습니다. sealed class SealClass { abstract val no: Int } class A: SealClass() { override val no: Int = 12 } fun main() { // Sealed types cannot be instantiated // val sealClass = SealClass() val a = A() .also { println(it.no) } } sealed class는 abstract 멤버를 가질 수 있습니다. sealed class는 그자체로 객체가 될 수 없습니다. (Sealed types cannot be instantiated 에러 뱉음) internal class SealedCl.. 2021. 12. 28.
[Spring][Kotlin] Main class name has not been configured and it could not be resolved Execution failed for task ':bootRun'. > Failed to calculate the value of task ':bootRun' property 'mainClass'. > Main class name has not been configured and it could not be resolved 어플리케이션 띄울때, main class를 못찾는다고 한다. // build.gradle.kts springBoot { mainClass.set("com.withhamit.chatting.ChattingApplicationKt") } mainClass 위치를 명시적으로 지정해준다. 코틀린으로 작성한 경우 자바로 컴파일될때 파일명에 Kt가 붙기 때문에 ChattingApplication.. 2021. 6. 26.
[채팅] 1. Spring boot WebSocket Handler 기본 세팅 // ReactiveWebSocketHandler.kt @Component class ReactiveWebSocketHandler : WebSocketHandler { private val log = LoggerFactory.getLogger(this.javaClass) override fun handle(session: WebSocketSession): Mono { return session.receive() .map { it.payloadAsText.also { log.info(it) } }.then() } } WebSocketHandler 인터페이스를 상속받은 클래스를 만들어 Component로 등록한다. handle에서 메시지가 들어올 때, 할 일 들을 명시해줘야하는데 일단은 돌아가는지 확인하는 .. 2021. 6. 22.