Найти последние записи в списке на основе поля

Я даже не уверен, как искать, если это существующие вопросы. Позвольте мне привести пример:

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]
Другие вопросы по тегам