코틀린 flatMap() 함수

David Mbochi Njonge 2023년6월20일
  1. Kotlin에서 map() 함수를 사용할 때 흔히 발생하는 함정
  2. 코틀린 flatMap() 함수
  3. Kotlin에서 flatMap() 함수의 대안
  4. 결론
코틀린 flatMap() 함수

애플리케이션을 개발할 때 우리는 항상 애플리케이션 전체에서 컬렉션 프레임워크를 사용합니다. 목록이 있으면 컬렉션과 상호 작용한 것입니다.

컬렉션을 사용하여 관련 데이터를 메모리에 임시로 저장하여 데이터에 대해 다른 계산을 실행합니다. 예를 들어 컬렉션은 데이터베이스나 파일에서 데이터 크기를 찾는 데 도움이 됩니다.

이러한 계산은 개발자가 명령형 프로그래밍 접근 방식을 사용했기 때문에 스트림이 Java 8에 도입되기 전에는 구현하기가 상당히 어려웠습니다.

stream API는 코드가 선언적 프로그래밍 접근 방식을 사용하기 때문에 컬렉션을 사용한 계산을 구현하기 매우 쉽게 만들었습니다.

Kotlin에서는 filter(), map(), flatMap() 등과 같은 stream API에서 사용되는 동일한 메서드와 함께 이 프로그래밍 접근 방식을 사용할 수도 있습니다.

이 튜토리얼에서는 Kotlin에서 flatMap() 함수가 작동하는 방식과 flatMap()map() 함수의 차이점에 대해 알아봅니다.

Kotlin에서 map() 함수를 사용할 때 흔히 발생하는 함정

map() 함수를 사용할 때 두 개의 목록에서 작업한 후 단일 목록을 얻기로 결정할 수 있지만 함수는 단일 목록을 반환하지 않습니다.

이것은 map() 메서드를 사용하는 일반적인 문제입니다. 다음 섹션에서는 문제가 어떻게 발생하는지 보여줍니다.

IntelliJ 개발 환경을 열고 파일 > 새로 만들기 > 프로젝트를 선택합니다. 프로젝트 namekotlin-flatmap으로 입력하고 Language 섹션에서 Kotlin을 선택하고 Build system 섹션에서 Intellij를 선택합니다.

kotlin 폴더 아래에 Main.kt 파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.

val stringArray = arrayOf("Harry", "potter");

fun getUniqueCharacters(): List<List<String>> {
    return stringArray.map { word -> word.split("") }
        .distinct()
        .toList();
}

fun main(){
    println(getUniqueCharacters());
}

이 자습서에서 다룰 모든 예제의 목표는 위에 표시된 것처럼 두 개의 문자열이 있는 배열에서 고유한 문자를 포함하는 단일 목록을 반환하는 것입니다.

언급한 경우 getUniqueCharacters() 메서드는 map() 함수의 반환 유형인 목록 List<List<String>> 목록을 반환합니다.

map() 함수는 두 개의 개별 목록을 포함하는 목록을 반환하며 이는 우리의 목표에 반하는 것입니다. 코드를 실행하여 map() 함수가 아래와 같이 두 개의 개별 목록을 반환하는지 확인합니다.

[[, H, a, r, r, y, ], [, p, o, t, t, e, r, ]]

코틀린 flatMap() 함수

이전 예제를 주석 처리하고 다음 코드를 복사하여 Main.kt 파일 뒤에 붙여넣습니다.

val stringArray = arrayOf("Harry", "potter");

fun getUniqueCharacters(): List<String> {
    return stringArray.map { word -> word.split("") }
        .flatMap { it }
        .distinct()
        .toList();
}

fun main(){
    println(getUniqueCharacters())
}

getUniqueCharacters() 함수는 flatMap() 함수의 반환 유형인 문자열을 포함하는 목록을 반환합니다.

flatMap()split() 메서드를 사용하여 배열을 개별 문자로 변환하여 고유한 요소를 포함하는 단일 목록을 반환합니다. distinct() 메서드는 반환된 목록에 고유한 문자가 포함되도록 합니다.

위의 코드를 실행하여 고유한 문자 결과가 포함된 단일 목록을 확인합니다.

[, H, a, r, y, p, o, t, e]

Kotlin에서 flatMap() 함수의 대안

이전 예제를 주석 처리하고 다음 코드를 복사하여 그 뒤의 Main.kt 파일에 붙여넣습니다.

val stringArray = arrayOf("Harry", "potter");

fun getUniqueCharacters(): List<String> {
    return stringArray.map { word -> word.split("") }
        .flatten()
        .distinct()
        .toList()
}

fun main(){
    println(getUniqueCharacters())
}

이 예제에서는 flatMap() 함수와 유사한 flatten() 함수를 사용했습니다. flatten() 함수는 하나의 목록에 모든 기존 컬렉션 요소를 추가하여 단일 목록을 반환합니다.

이 예제를 실행하여 배열의 모든 고유 문자를 포함하는 단일 목록을 반환하는지 확인합니다.

[, H, a, r, y, p, o, t, e]

결론

이 튜토리얼에서는 여러 컬렉션에서 단일 목록을 반환하려는 경우 flatMap() 함수가 어떻게 작동하는지 배웠습니다. 우리는 또한 동일한 목표를 달성하기 위해 map() 메서드를 사용하는 단점을 배웠습니다.

Kotlin에서 다른 기능이 어떻게 작동하는지 자세히 알아보려면 기능을 자세히 다루는 Kotlin 설명서를 참조하세요.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub

관련 문장 - Kotlin Function