람다 식 처리 후 컬렉션 반환 X
val list = listOf(1,2,3,4,5,6)
list.forEachIndexed { index, value -> println("index[$index] : $value") } // 인덱스
[결과]
index[0] : 1
index[1] : 2
index[2] : 3
index[3] : 4
index[4] : 5
index[5] : 6
람다 식 처리 후 컬렉션 반환 O
val list = listOf(1,2,3,4,5,6)
val map = mapOf(11 to "Java", 22 to "Kotlin", 33 to "C++")
val returnList = list.onEach { println(it) }
println()
val returnedMap = map.onEach { println("key: ${it.key}, value: ${it.value}") }
println("returnList = $returnList")
println("returnMap = $returnedMap")
[결과]
returnList = [1, 2, 3, 4, 5, 6]
returnMap = {11=Java, 22=Kotlin, 33=C++}
fold()
: 초기값과 정해진 식에 따라 처음 요소 부터 끝 요소에 적용해 값 반환reduce()
: fold 와 동일하나 초기값을 사용하지 않는다val list3 = listOf(1,2,3,4,5,6)
println(list.fold(4) { total, next -> total + next })
println(list.foldRight(4) { total, next -> total + next })
println(list.reduce { total, next -> total + next })
[결과]
25
25
21
val list = listOf(1,2,3,4,5,6)
println(list.filter { it % 2 == 0}) // 짝수 요소
println(list.filterNot [ it % 2 == 0}) // 짝수 이외의 요소
val listWithNull = listOf(1,null, 3, null, 5, 6)
println(listWithNull.ffilterNotNull()) // null제외 요소
특정 인덱스와 함께 추출
// filterIndexed 인덱스와 함께 추출
list.filterIndexed { idx, value -> idx != 1 && value % 2 == 0 }
// filterIndexedTo 추출 후 mutable 컬렉션으로 변환
val mutList = list.filterIndexedTo(MutableListOf()) { idx, value -> idx != 1 && value % 2 == 0 }
filterIndexedTo
는 여기에 컬렉션으로 변환되는 기능이 추가filterKeys
키filterValues
값val map = mapOf(11 to "Java", 22 to "Kotlin", 33 to "C++")
map = map.filterKeys { it != 11 }
println(map) // {22=Kotlin, 33=C++}
map = map.filterValues { it == "Kotlin" } // {22=Kotlin}
특정 자료형에 대한 필터
val listMixed = listOf(1,"Hello", 3, "World", 5, 'A')
// 여러 자료형의 요소중 원하는 자료형을 골라냄
println("filterIsInstance: " + listMixed.filterIsInstance<String>())
val list = listOf(1,2,3,4,5,6)
println(list.slice(listOf(0,1,2))) // [1,2,3]
println(list.tack(2)) // 앞의 두 요소 반환 [1,2]
println(list.takeLast(2)) // 마지막 요소의 두 요소 반환 [5,6]
println(list.takeWhile{ it < 3 }) // 조건식에 따른 반환 [1,2]
val list = listOF(2,2,3,4,5,5,6)
println("distinct: "+ list.distinct()) // [2,3,4,5,6]
printl("intersect: " + list.intersect(listOf(5,6,7,8))) // [5,6]
val list = listOf(1,2,3,4,5,6)
// 컬렉션에 주어진 요소들로 새로운 컬렉션을 반환
print(list.map{it * 2}) // [2,4,5,8,10,12]
// 컬렉션에 인덱스를 포함하여 새로운 컬렉션을 반환
print(list.mapIndexed{ index,it -> index * it}) // [0,2,6,12,20,30]
val listWithNull = listOf(1,null,3,null,5,6)
// null을 제외하고 식을 적용하여 새로운 컬렉션을 반환한다
println(listWithNull.mapNotNull{ it?.times(2) }) // [2,6,10,12]
val list = listOf(1,2,3,4,5,6)
print(list.flatMap{ listOf(it, 'A') }) // [1, A, 2, A, 3, A, 4, A, 5, A, 6, A]
val result = listOf("abc","12").flatMap{ it.toList() }
println(result) // [a, b, c, 1, 2]
val list = listOf(1,2,3,4,5,6)
val groupMap = list.groupBy{ if (it % 2 == 0) "even" else "odd" }
println(groupMap) // {odd=[1,3,5], even=[2,4,6]}
val list = listOf(1,2,3,4,5,6)
// 인덱스에 해당하는 요소를 반환
println(list.elementAt(1)) // 2
// 인덱스를 벗어나는 경우 식에 따라 결과 반환 아니면 요소 반환
println(list.elementAtOrElse(10, {2*it})) // 20
// 인덱스를 벗어나는 경우 null 반환
println(list.elementAtOrNull(10)) // null