본문 바로가기
코틀린/[Filtering] 필터 작업

[Kotlin][Collection] takeWhile / takeLastWhile

by jinwo_o 2024. 8. 28.

주어진 조건자를 만족하는 첫 번째 요소를 포함하는 목록을 반환합니다.

public inline fun <T> Iterable<T>.takeWhile(predicate: (T) -> Boolean): List<T> {
    val list = ArrayList<T>()
    for (item in this) {
        if (!predicate(item))
            break
        list.add(item)
    }
    return list
}


val chars = ('a'..'z').toList()
println(chars.takeWhile { it < 'f' }) // [a, b, c, d, e]

 

주어진 조건자를 만족하는 마지막 요소를 포함하는 목록을 반환합니다.

public inline fun <T> List<T>.takeLastWhile(predicate: (T) -> Boolean): List<T> {
    if (isEmpty())
        return emptyList()
    val iterator = listIterator(size)
    while (iterator.hasPrevious()) {
        if (!predicate(iterator.previous())) {
            iterator.next()
            val expectedSize = size - iterator.nextIndex()
            if (expectedSize == 0) return emptyList()
            return ArrayList<T>(expectedSize).apply {
                while (iterator.hasNext())
                    add(iterator.next())
            }
        }
    }
    return toList()
}


val chars = ('a'..'z').toList()
println(chars.takeLastWhile { it > 'w' }) // [x, y, z]

 

takeWhile - Kotlin Programming Language

 

kotlinlang.org

 

takeLastWhile - Kotlin Programming Language

 

kotlinlang.org