티스토리 뷰
본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!!
필터링 함수는 컬렉션 타입의 데이터 중 조건에 맞는 일부분의 데이터를 추출하는 함수다.
2. 필터링 함수
2.1. filter()
- filter() 함수는 컬렉션 타입의 데이터 중 특정 조건에 맞는 데이터만 추출할 때 이용한다.
val resultList = listOf(1, 2, 3, 4, 5, 6, 7).filter { it > 4 } // [5, 6, 7]
2. 2. filterNot(), filterNotNull()
filterNot()
- filter() 함수의 반대라고 생각하면 되겟다. 람다 함수에 명시된 조건에 맞지 않는 데이터만 추출할 때 이용한다.
val resultList = listOf(1, 2, 3, 4, 5).filter { it > 4 } // [1, 2, 3]
filterNotNull()
- 컬렉션의 데이터 중 Null이 아닌 데이터만 추출한다.
val resultList = listOf(1, 2, null, 4, 5).filterNotNull() // [1, 2, 4, 5]
2.3. drop(), dropWhile(), dropLastWhile()
컬렉션 데이터 중 일부분을 제외하고 나머지를 추출할 때 사용한다.
drop
- 매개 변수로 입력된 숫자를 대입하면 앞부분부터 대입한 숫자 개수만큼은 제외하고 나머지를 추출한다.
listOf(1, 2, 3, 4, 5).drop(2) // [3, 4, 5]
dropWhile()
- 매개변수로 람다 함수를 지정하며 앞부분부터 조건에 만족하지 않는 데이터가 나올 때 데이터를 제외한다.
- 조건에 만족하지 않는 데이터가 나오는 순간 그 데이터부터 뒤 데이터까지 모두 추출한다.
listOf(3, 4, 21, 2, 1).dropWhile { it < 20 } // [21, 2, 1]
dropLastWhile()
- dropWhile() 과 비슷하지만 순서가 반대다.
- 마지막 요소부터 거꾸로 조건을 판단하고 조건에 만족하지 않는 부분에서부터 나머지 앞 데이터까지 모두 추출한다.
listOf(3, 4, 21, 2, 1).dropLastWhile { it < 20 } // [3, 4, 21]
2.4. slice(), take(), takeLast(), takeWhile()
특정 위치에 있는 데이터를 추출하는 함수다.
slice()
- slice() 함수는 범위나 숫자 값을 여러 개 대입하고 그 위치에 있는 데이터만 추출한다.
listOf(1, 12, 4, 23, 5, 4).slice(1 .. 3) // [12, 4, 23]
- slice() 함수를 이용할 때 특정 위치 값을 어러 개 지정하여 데이터를 추출할 수도 있다.
listOf(1, 12, 4, 23, 5, 4).slice(listOf(1, 4, 5)) // [12, 5, 4]
take()
- 숫자 값을 매개변수로 전달하면 앞에서부터 숫자에 해당하는 개수의 데이터를 추출한다.
- drop() 이랑 반대되는 느낌으로 사용한다.
var result = listOf(1, 2, 3, 4, 5).take(3) // [1, 2, 3]
takeLast()
- 마지막 데이터부터 매개변수로 전달받은 개수만큼 추출한다.
var result = listOf(1, 2, 3, 4, 5).takeLast(3) // [3, 4, 5]
takeWhile()
- 람다 함수에 조건을 명시하고 해당 조건에 만족하지 않는 데이터가 나오기 전까지의 데이터를 추출한다.
var result = listOf(1, 2, 3, 4, 5).takeWhile { it < 4 } // [1, 2, 3]
3. 매핑 함수
3.1. map(), mapIndexed()
map()
- forEach() 함수와 비슷하다. 집합 객체의 데이터 개수만큼 반복 실행하는 것이 동일하다.
- forEach() 함수와 차이점은 람다 함수를 실행한 후의 리스트 반환값이 있다는 것이다.
result = listOf(2, 5, 11).map { it * 10 } // [20, 50, 110]
mapIndexed()
- map() 함수와 동일한데 람다 함수에 인덱스까지 전달해준다.
listOf(1, 2, 3).mapIndexed { index, data -> index * data } // [0, 2, 6]
3.2. groupBy()
- 컬렉션 타입의 데이터를 특정 데이터로 묶을 때 사용한다.
- 반환값은 Map 객체이고 key 값은 그룹으로 묶기 위한 데이터이고 value 값은 그 그룹으로 묶인 여러 건의 데이터를 List로 반환한다.
list = listOf<User>(User("kim", 28), User("jeong", 29), User("No", 29), User("yeom", 30))
val groupedList = list.groupBy { it.age } // 데이터는 아래와 같다.
// 정확한 형식은 아니고 임의로 표현한 방식입니다. json에 기초해서 작성하였습니다.
// groupedList
{
28 : [ User("kim", 28) ]
29 : [ User("jeong", 29), User("No", 29) ] // 리스트 형식으로 묶여있다.
30 : [ User("yeom", 30) ]
}
참고 자료
[깡샘의 코틀린 프로그래밍] 강성윤 지음 <루비페이퍼>
반응형
'Programming > 코틀린(Kotlin)' 카테고리의 다른 글
[코틀린] 15. Null 안전성과 예외 처리 (0) | 2021.05.04 |
---|---|
[코틀린] 14. 컬렉션 타입과 람다 - 4. 요소 함수, 5. 정렬 함수 (0) | 2021.05.02 |
[코틀린] 14. 컬렉션 타입과 람다 - 1. 집합 연산 함수 (0) | 2021.05.02 |
[코틀린] 코틀린 API의 범위 지정 함수 (0) | 2021.04.26 |
[코틀린] Object 클래스 (feat. 깡샘) (0) | 2021.04.25 |
댓글