코틀린 & Java

스트림 함수

코딩하는후운 2021. 8. 4. 15:21
반응형

변환

map()

: 컬렉션 내 인자를 다른 값 혹은 타입으로 변환할 때 사용합니다.


val cities = listOf("Seoul", "Tokyo")
cities.map { city -> city.toUpperCase() }.forEach { print(it) } // 대문자로 변환
cities.map { city -> city.length }.forEach { print(it) } // length 변환

 

mapIndexed()

: 컬렉션 내 포함된 인자의 인덱스 값을 변환 함수 내에서 사용할 수 있습니다.

 

val numbers = 0..10

numbers.mapIndexed{ idx, number -> idx * number }.forEach{ print("$it ") }  //변환 함수에서 각 인자와 인덱스를 곱한 값을 반환

 

mapNotNull()

: 컬렉션 내 각 인자를 변환함과 동시에, 변환한 결과가 널 값인 경우 이를 무시합니다.

val cities = listOf("Seoul", "Tokyo")

cities.mapNotNull{ city -> if(city.length <=5 ) city else null }.forEach{ println(it) } //이름의 길이가 5이하일 경우 이름 아니면 null반환

 

flatMap()

: map()함수와 유사하게 컬렉션 내 인자를 다른 형태로 변환해주는 역할을 합니다. 하지만 map()함수와 달리 flatMap()함수는 변환 함수의 변환형이 Iterable입니다. 따라서 하나의 인자에서 여러 개의 인자로 매핑이 필요한 경우에 사용합니다.

val numbers = 1..6

//1부터 시작하여 각 인자를 끝으로 하는 범위를 반환합니다.

number.flatMap { number -> 1..number }.forEach { print("$it ") }

결과 : 1 12 123 1234 12345 123456

 

groupBy()

: 컬렉션 내 인자들을 지정한 기준에 따라 분류하며, 각 인자들의 리스트를 포함하는 맵 형태로 결과를 반환

val cities = listOf("Seoul", "Tokyo", "Mountain View")

//도시 이름의 길이가 5이하면 "A" 아니면 "B"그룹에 대입

//여기에서 지정하는 이름을 반환하는 앱의 키 이름으로 사용됩니다.

cities.groupBy{ city -> if(city.length <=5) "A" else "B" }.forEach { key, cities -> println("key=$key cities=$cities") }

결과 : key A cities=[Seoul, Tokyo]

 

필터

filter()

: 컬렉션 내 인자들 중 주어진 조건과 일치하는 인자만 걸러주는 역할을 합니다.

val cities = listOf("Seoul", "Tokyo")

//도시 이름의 길이가 5이하인 항목만 통과

cities.filter { city -> city.length <= 5 }.forEach{ println(it) }

 

take() : 인자로 받은 개수만큼만을 인자로 갖는 리스트를 반환

takeLast() : take()함수와 반대로 뒤에서부터 이 함수의 인자로 받은 개수 만큼만을 인자로 갖는 리스트를 반환

takeWhile() : 첫 번째 인자부터 시작하여 주어진 조건을 만족하는 인자까지를 포함하는 리스트를 반환합니다.

takeLastWhile() : takeWhile() 함수와 반대로 뒤에서부터 주어진 조건을 만족하는 인자까지 포함하는 리스트를 반환합니다.

 

val cities = listOf("Seoul", "Tokyo", "Mountain View", "NYC", "Singapore")

//첫 번째 인자로부터 하나의 인자만 포함하도록 합니다.

cities.take(1).forEach { println(it) } // Seoul

//마지막 인자로부터 두 개의 인자만 포함하도록 합니다.

cities.takeLast(2).forEach { println(it) } // NYC, Singapore

//문자열의 길이가 5 이하인 조건을 만족할 때까지 해당하는 항목을 반환합니다.

cities.takeWhile { city -> city.length <= 5 }.forEach { println(it) } // Seoul, Tokyo

//뒤에서부터 시작하여, 문자열의 길이가 13 미만의 조건을 만족할 떄까지 해당하는 항목을 반환

cities.takeLastWhile{ city -> city.length < 13 }.forEach{ println(it) } // NYC, Singapore

 

drop() 함수는 take()함수의 반대 역할을 하며 조건을 만족하는 항목을 컬렉션에서 제외한 결과를 반환합니다.

drop()

dropLast()

dropWhile()

dropLastWhile()

 

first()

: 컬렉션 내 첫번째 인자를 반환합니다. 또 특정조건을 만족하는 첫 번째 인자를 반환하도록 구성하는 것도 가능합니다.

조건을 만족하는 인자가 없을 경우 NoSuchElementException 예외를 발생시키며, firstOrNull() 함수를 사용하면 예외 대신 null값을 반환 하도록 할 수 있습니다.

 

val cities = listOf("Seoul", "Tokyo", "Mountain View", "NYC")

//첫 번째, 마지막 인자를 반환

cities.first(), cities.last()

//문자열 길이가 5 이상인 첫 번째 인자를 반환

cities.first { city -> city.length > 5 }

//조건을 만족하는 첫 번째 인자를 반환하여, 없을 경우 null 값을 반환

cities.firstOrNull { city -> city.isEmpty() } 

 

 

 

참조 : 

https://park0422.tistory.com/40

반응형

'코틀린 & Java' 카테고리의 다른 글

LiveData와 StateFlow의 차이  (0) 2021.12.27
코틀린 코딩컨벤션 정리  (0) 2021.12.13
Kotlin 코딩규칙 서식  (0) 2021.07.07
Kotlin 코딩규칙 명명 규칙  (0) 2021.07.07
Kotlin 코딩규칙 소스 코드 구성  (0) 2021.07.07