2016-02-20 3 views
3

У меня есть список, на котором я бы хотел применить некоторые преобразования, но исключая первые 2 элемента. Как я могу сделать это лучше всего? Что-то вроде этого:Возьмите последний элемент n в Kotlin

list.reversed().take(list.size - 2)...(my transformations) 

или

list.excludeFirstN(2)...(my transformations) 
+0

пожалуйста прояснить вопрос (и ответ): Вы хотите применить преобразование ко всем элементам для двух из них, за исключением, или же вы хотите отказаться от них два навсегда? – voddan

+0

Пожалуйста, разместите код, который решил вашу проблему (вы можете обновить вопрос). Есть хороший шанс, что кто-то может предложить более короткий или более идиоматический способ сделать это. – voddan

ответ

2

О, я нашел функцию drop().

+2

FYI: Существует также ['takeLast'] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/take-last.html), если вы действительно хотите« взять последний n-элемент в Котлине ». – mfulton26

+0

takeLast не появляется для меня в среде IDE. Я вызвал asSequence() на Java Iterator. – LordScone

0

Вы можете использовать takeLast(n) как:

list.takeLast(3) 

Но быть carful, последний номер представлен первый, так что вам, возможно, придется использовать reversed, так что ваш код может быть:

list.takeLast(3).reversed() 
0

Как уже упоминалось, drop подходит для использования:

listOf(1,2,3,4).drop(2).forEach(::println) 

В противном случае, вы можете также фильтровать по индексу:

listOf(1,2,3,4).filterIndexed { index, _ -> index > 1 }.forEach(::println) 
Смежные вопросы