Найти последние записи в списке на основе поля
Я даже не уверен, как искать, если это существующие вопросы. Позвольте мне привести пример:
Call Instance Date Created Resource Resource Status
------------------------------------------------------------------
6557 2013-07-12 11:34:19 cwood Accepted
6556 2013-07-12 11:34:18 cwood Accepted
2013-07-12 11:29:25 cwood Ready
6555 2013-07-12 09:24:41 cwood Accepted
Как получить две верхние принятые записи сверху без получения последней принятой записи (как это было до записи Ready)?
Все поля, кроме "Дата создания", являются пользовательскими классами (Call, User [no, not Resource] и ResourceStatus).
Пожалуйста, дайте мне знать, будет ли полезен следующий код.
2 ответа
Ты можешь использовать takeWhile()
:
assert [1,2] == [1,2,3,4,5].takeWhile { it < 3 }
РЕДАКТИРОВАТЬ (Audacity @dmahapatro для редактирования ответа)
Небольшой контрольный пример для доступных состояний, отличных от Принятый и Готов:
def list = ['A', 'A', 'B', 'A', 'R', 'A']
assert list.takeWhile{ it == 'A'} == ['A', 'A']
assert list.takeWhile{ it != 'R'} == ['A', 'A', 'B', 'A']
Логика для постановки задачи ниже:
О, это хороший момент @dmahapatro. Иногда пользователь может быть занятым во время работы над вызовом, и я хочу получить все статусы Принятые, которые появляются до занятого, но после состояния готовности ("до", находящегося "справа от"), И также не получать занятого, Итак, я полагаю, мне нужно сделать statusDescription!= 'Ready' и statusDescription!= 'Busy' или около того. Код наверняка будет намного чище без людей, которые будут его использовать!
def list = ['A', 'A', 'A', 'R', 'A', 'A','B', 'A']
def statusBeforeBusy = list.takeWhile{ it != 'B'}
println "Statuses before Busy: $statusBeforeBusy" //[A, A, A, R, A, A]
def statusBeforeReady = list.takeWhile{ it != 'R'}
println "Statuses before Ready: $statusBeforeReady" //[A, A, A]
def statusaAfterReadyBeforeBusy = statusBeforeBusy.dropWhile{ it != 'R'}.tail()
println "Statuses After Ready before Busy: $statusaAfterReadyBeforeBusy" //[A, A]