컬렉션과 람다
어떤 형태의 람다 표현식이 필요한 지 생성
컬렉션은 데이터의 모임 : 배열(Array), 리스트(List), Set
Map 은 수행 되는 것도 있고 안되는 것도 있다.
fun main(args:Array<String>){
val ar = arrayOf<Int>(20, 30, 17, 22)
// 일반적인 람다 표현식을 대입
ar.forEach({n:Int -> println(n)})
// 매개 변수가 1개 이면 매개변수를 생략하고 it를 사용 가능
ar.forEach({println(it)})
// 람다 표현식이 함수의 마지막 매개 변수라면 () 외부에 작성 가능
ar.forEach{println(it)}
// forEachIndexed
// 2개의 매개 변수를 갖고 리턴이 Unit인 람다 표현식을 대입
// 첫번째 매개 변수는 데이터의 인덱스이고
// 두번째 매개 변수는 데이터 입니다.
ar.forEachIndexed { index, i -> println(index * i) }
}
1. forEach
컬렉션의 데이터를 순회하면서 함수를 실행
컬렉션의 자료형 1개를 매개 변수로 받고 Unit을 리턴하는 함수가 대입
> 매개 변수가 컬렉션의 데이터를 순서대로 대입 받습니다.
{Int -> Unit}
2. all, any, none
람다 표현식을 대입받아서 순회하면서 실행한 후 결과를 Ture 나 False로 리턴
대입 되는 람다는 매개변수가 1 개이고 Boolean 을 리턴하는 형태
all 은 모든 데이터가 True로 리턴하면 True 그렇지 않으면 False를 리턴
any 는 데이터 중 한 개 라도 True 를 리턴하면 True 그렇지 않으면 False를 리턴
none 은 모든 데이터가 False로 리턴하면 True 그렇지 않으면 False를 리턴
3. count, find
count 는 True를 리턴한 데이터의 개수를 리턴
find 는 True 를 리턴한 첫번째 데이터를 리턴
대입 되는 람다는 매개 변수가 1개이고 Boolean을 리턴하는 형태
4. max(), min()
매개 변수 없이 호출해서 가장 큰 데이터와 가장 작은 데이터를 리턴
5. maxBy(), minBy()
매개 변수가 1개이고 리턴이 있는 표현식을 대입 받아서 리턴 값이 가장 큰 데이터나 작은 데이터를 리턴
6. SumBy()
매개 변수가 1개이고 리턴이 있는 표현식을 대입 받아서 리턴 되는 데이터의 합계를 리턴
7. Kotlin은 문자열도 크기 비교가 가능
8. reduce, fold, reduceRight, foldRight
reduce는 누적 연산
reduce는 하나의 매개 변수를 대입해야 하는데 이 매개 변수는 매개 변수가 2개이고 1개의 결과를 리턴하는 람다 표현식
첫번째 매개 변수는 누적 계산 값 이고 두번째 매개 변수는 데이터 입니다.
fold는 첫번째 매개 변수는 기본 값이 고 두번째 매개 변수는 reduce와 같습니다.
reduceRight는 데이터를 뒤에서 부터 순회해서 연산을 수행
foldRight도 데이터를 뒤에서 부터 순회해서 연산을 수행
reduceRight 와 foldRight는 함수의 매개 변수 순서가 반대
reduce 와 reduceRight는 데이터가 1개도 없으면 예외를 발생시키지만 fold는 기본 값이 리턴
9. 데이터 추출 함수
1) filter
매개 변수가 1개이고 Boolean 을 리턴하는 함수를 대입받아서 true를 리턴 하는 데이터만 모아서 리턴해주는 함수
2) filterNot은 filter와 반대로 false인 데이터만 추출
3) filterNull은 Null인 데이터만 추출
class User(var name:String, var gender:String, var score:Int){
}
fun main(args : Array<String>){
var list = mutableListOf<User>(
User("유관순", "여자", 98),
User("윤봉길", "남자", 82),
User("김좌진", "남자", 72),
User("남지현", "여자", 92)
)
list.filter { it.gender == "남자" }.forEach{println(it.name)}
//성별이 여자인 데이터의 score 합계를 출력
println(list.filter{it.gender=="여자"}.map{it.score}.sum())
}
4) drop은 정수를 매개 변수로 받아서 정수 개수 만큼 제거
5) dropLast 는 뒤에서 부터 제거
6) dropWhile 은 매개 변수로 매개 변수가 1개 이고 Boolean을 리턴하는 람다를 받아서 true를 리턴하는 첫번째 데이터까지 제거
7) dropLastWhile 은 매개 변수로 매개 변수가 1개 이고 Boolean을 리턴하는 람다를 받아서 true를 리턴하는 첫번째 데이터까지 제거
8) slice
=> 정수, 범위, Collection 으로 대입 받아서 해당하는 데이터만 추출
1...3, 1,3, 4
9) take
정수를 대입받아서 정수 개수 만큼 앞에서 가져오기
10) takeWhile
=> 매개 변수가 1개 이고 Boolean을 리턴하는 람다를 대입받아서 true를 리턴할 때 까지 데이터를 가져옵니다.
12) takeLastWhile
13) map
=> 매개 변수를 1개 갖고 리턴이 있는 람다를 대입받아서 리턴 값들의 모임을 리턴해주는 함수
=> 데이터를 변환해주는 역할을 수행합니다.
14) mapIndexed
=> 매개 변수가 2개인 람다를 대입
=> 첫번째 매개 변수는 인덱스이고 두번째 매개 변수는 데이터입니다.
'kotlin' 카테고리의 다른 글
코틀린 : null 안전성 (0) | 2020.10.21 |
---|---|
코틀린 : Collection 과 람다, 정렬 (0) | 2020.10.21 |
코틀린: 컬렉션과 람다 (0) | 2020.10.20 |
코틀린 : Inline 함수 (0) | 2020.10.20 |
코틀린 : 함수형 프로그래밍 (0) | 2020.10.20 |