컬렉션 연산의 유형
println(numbers.size) // 리스트 길이: 5
println(numbers.count { it > 2 }) // 2보다 큰 요소의 개수: 3
println("zero" in numbers) // false
println(numbers.contains("four")) // "four"가 포함되어 있는지: true
println(numbers.containsAll(listOf("four", "two"))) // true
println(numbers.containsAll(listOf("one", "zero"))) // false
println(ageMap.containsKey("Bob")) // "Bob"이 키로 포함되어 있는지: true
val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.isEmpty()) // false
println(numbers.isNotEmpty()) // true
val empty = emptyList<String>()
println(empty.isEmpty()) // true
println(empty.isNotEmpty()) // false
numbers[2] // 인덱스 2의 요소: 3
numbers.first() // 인덱스 0의 요소: 1
numbers.first { it > 3 } // 조건 부합하는 인덱스 0의 요소: 4
numbers.last() // 인덱스 -1의 요소: 5
numbers.last{ it < 4 } // 조건 부합하는 인덱스 -1의 요소: 3
println(numbers.indexOf(4)) // 4의 인덱스: 3
val sliced = numbers.slice(1..3) // 인덱스 1부터 3까지: [2, 3, 4]
minOrNull() : 컬렉션에서 가장 작은 요소 반환. 비어있다면 null 반환maxOrNull() : 컬렉션에서 가장 큰 요소 반환. 비어있다면 null 반환average() : 숫자 컬렉션의 평균값 반환sum() : 숫자 컬렉션의 합계 반환count() : 컬렉션의 요소 개수 반환val numbers = listOf(6, 42, 10, 4)
println("Count: ${numbers.count()}") // 4
println("Max: ${numbers.maxOrNull()}") // 42
println("Min: ${numbers.minOrNull()}") // 4
println("Average: ${numbers.average()}") // 15.5
println("Sum: ${numbers.sum()}") // 62
reduce()와 fold()는 컬렉션의 요소를 순차적으로 연산하여 누적 결과를 반환한다.
reduce(): 첫 번째와 두 번째 요소를 첫 단계의 인수로 사용한다.fold(): 초기값을 첫 번째 단계의 누적값으로 사용한다.val numbers = listOf(1, 2, 3, 4)
val simpleSum = numbers.reduce { sum, element -> sum + element }
println(simpleSum) // 10 (1 + 2 + 3 + 4)
val sumDoubled = numbers.fold(5) { sum, element -> sum + element * 2 }
println(sumDoubled) // 15 (5 + 1 + 2+ 3 + 4)
iterator() 함수를 호출하면 Iterator 객체가 생성되고, 이 객체는 컬렉션의 첫 번째 요소를 가리킨다.
next() 함수는 현재 요소를 반환하고, 다음 요소로 이동한다.
마지막 요소를 지나면 더 이상 요소를 가져올 수 없으며, 다시 순회하려면 새로운 Iterator를 만들어야 한다.
val numbers = listOf("one", "two", "three", "four")
val numbersIterator = numbers.iterator()
while (numbersIterator.hasNext()) {
println(numbersIterator.next())
// 출력:
// one
// two
// three
// four
}
Kotlin의 for 루프는 컬렉션의 Iterator를 암묵적으로 사용한다.
val numbers = listOf("one", "two", "three", "four")
for (item in numbers) {
println(item)
// 출력:
// one
// two
// three
// four
}
for (i in 1..4) print(i) // 1234
for (i in 4 downTo 1) print(i) // 4321
for (i in 0..8 step 2) print(i) // 02468
val numbers = listOf("one", "two", "three", "four")
numbers.forEach {
println(it)
// 출력:
// one
// two
// three
// four
}
val copiedList = numbers.toList() // 리스트 복사: [1, 2, 3, 4, 5]
compareBy() : Comparator 정의 가능val sortedList = numbers.sorted() // 정렬된 리스트: [1, 2, 3, 4, 5]
val sortedDescending = numbers.sortedByDescending() // 내림차순으로 정렬된 리스트: [5, 4, 3, 2, 1]
val pairs = listOf(
Pair("Alice", 30),
Pair("Bob", 25),
Pair("Charlie", 35)
)
// 첫 번째 요소(이름) 기준 오름차순 정렬
val sortedByName = pairs.sortedBy { it.first }
println(sortedByName) // [(Alice, 30), (Bob, 25), (Charlie, 35)]
// 두 번째 요소(나이) 기준 오름차순 정렬
val sortedByAge = pairs.sortedBy { it.second }
println(sortedByAge) // [(Bob, 25), (Alice, 30), (Charlie, 35)]
// 두 번째 요소(나이) 기준 내림차순 정렬
val sortedByAgeDescending = pairs.sortedByDescending { it.second }
println(sortedByAgeDescending) // [(Charlie, 35), (Alice, 30), (Bob, 25)]
listOf("aaa", "bb", "c").sortedWith(compareBy { it.length }) // [c, bb, aaa]
val reversedList = numbers.reversed() // 뒤집힌 리스트: [5, 4, 3, 2, 1]
val mutableNumbers = mutableListOf(1, 2, 3)
// 새로운 함수 반환
val combined = numbers + listOf(5, 6, 7) // 두 리스트 합치기: [1, 2, 3, 4, 5, 6, 7]
// 기존 함수 변경
mutableNumbers.addAll(listOf(4, 5)) // 리스트 확장: [1, 2, 3, 4, 5]
mutableNumbers += 6 // [1, 2, 3, 4, 5, 6]
mutableNumbers.add(4) // 요소 추가: [10, 2, 3, 4]
mutableNumbers.add(1, 5) // 인덱스 1에 5 삽입: [10, 5, 2, 3, 4]
deque.addFirst(0) // 앞에 요소 추가: [0, 1, 2, 3]
deque.addLast(4) // 뒤에 요소 추가: [0, 1, 2, 3, 4]
mutableAgeMap["Charlie"] = 20 // 새로운 키-값 추가: {"Alice" to 30, "Bob" to 25, "Charlie" to 20}
mutableAgeMap.remove("Alice") // "Alice" 엔트리 제거: {"Bob" to 25, "Charlie" to 20}
val numbers = listOf("one", "two", "three", "four")
val mutableNumbers = mutableListOf("one", "two", "three")
// 단일 요소 제거
val minusList = numbers - "two" // [one, three, four]
mutableNumbers -= "two" // [one, three, four]
// 컬렉션의 요소 제거
val minusList2 = numbers - listOf("three", "four") // [one, two]
mutableNumbers.remove(5) // 5 제거: [10, 2, 3, 4, 6, 7]
deque.removeFirst() // 첫 번째 요소 제거: [1, 2, 3, 4]
deque.removeLast() // 마지막 요소 제거: [1, 2, 3]
mutableNumbers[0] = 10 // 첫 번째 요소를 10으로 변경: [10, 2, 3]