티스토리 뷰

본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!!


필터링 함수는 컬렉션 타입의 데이터 중 조건에 맞는 일부분의 데이터를 추출하는 함수다.

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) ]
}

 

참고 자료

[깡샘의 코틀린 프로그래밍] 강성윤 지음 <루비페이퍼>

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함