filter / filterIndexed

val numbers = listOf(1, 2, 3, 4, 5)

// filter: 조건에 맞는 요소만 필터링
val evenNumbers = numbers.filter { it % 2 == 0 } // [2, 4]

// filterIndexed: 인덱스를 활용하여 필터링
val indexedFilter = numbers.filterIndexed { index, value -> index % 2 == 0 } // [1, 3, 5]

map / mapIndexed / mapNotNull

val numbers = listOf(1, 2, 3, 4, 5)

// map: 각 요소를 변환
val squared = numbers.map { it * it } // [1, 4, 9, 16, 25]

// mapIndexed: 인덱스를 활용하여 변환
val indexedMap = numbers.mapIndexed { index, value -> index * value } // [0, 2, 6, 12, 20]

// mapNotNull: null을 제외하고 변환
val nullableNumbers = listOf(1, null, 3, null, 5)
val nonNull = nullableNumbers.mapNotNull { it?.times(2) } // [2, 6, 10]

all / none / any

val numbers = listOf(1, 2, 3, 4, 5)

// all: 모든 요소가 조건을 만족하는지 확인
val allEven = numbers.all { it % 2 == 0 } // false

// none: 조건을 만족하는 요소가 없는지 확인
val noneNegative = numbers.none { it < 0 } // true

// any: 조건을 만족하는 요소가 하나라도 있는지 확인
val anyEven = numbers.any { it % 2 == 0 } // true

count / sortedBy / sortedByDescending / distinct

val numbers = listOf(5, 3, 1, 2, 3, 4, 5)

// count: 조건을 만족하는 요소의 개수
val evenCount = numbers.count { it % 2 == 0 } // 2

// sortedBy: 특정 기준으로 정렬
val sorted = numbers.sortedBy { it } // [1, 2, 3, 3, 4, 5, 5]

// sortedByDescending: 내림차순 정렬
val sortedDesc = numbers.sortedByDescending { it } // [5, 5, 4, 3, 3, 2, 1]

// distinct: 중복 제거
val distinctNumbers = numbers.distinct() // [5, 3, 1, 2, 4]

first / firstOrNull / last / lastOrNull

val numbers = listOf(1, 2, 3, 4, 5)

// first: 첫 번째 요소 반환 (조건 가능)
val firstEven = numbers.first { it % 2 == 0 } // 2

// firstOrNull: 조건에 맞는 첫 번째 요소 반환 (없으면 null)
val firstGreaterThanFive = numbers.firstOrNull { it > 5 } // null

// last: 마지막 요소 반환 (조건 가능)
val lastOdd = numbers.last { it % 2 != 0 } // 5

// lastOrNull: 조건에 맞는 마지막 요소 반환 (없으면 null)
val lastGreaterThanFive = numbers.lastOrNull { it > 5 } // null

groupBy / associateBy

val words = listOf("apple", "banana", "cherry", "apricot", "blueberry")

// groupBy: 특정 기준으로 그룹화
val groupedByFirstLetter = words.groupBy { it.first() }
// {a=[apple, apricot], b=[banana, blueberry], c=[cherry]}

// associateBy: 특정 키를 기준으로 맵 생성
val associatedByLength = words.associateBy { it.length }
// {5=apple, 6=banana, 7=cherry, 8=blueberry}

flatMap / flatten