Groovy, как удалить элемент из списка на основе содержимого элемента?

Я работаю над отличным скриптом для Jira — я собираю список комментариев из задачи и сохраняю имя пользователя последнего комментария.

Пример:

import com.atlassian.jira.component.ComponentAccessor
def commentManager = ComponentAccessor.getCommentManager()
def comments = commentManager.getComments(issue)
if (comments) {
comments.last().authorUser
}

Иногда я не хочу хранить имя пользователя (если оно принадлежит предопределенной роли). По сути, я хочу сначала проверить комментарии и удалить все комментарии из моего списка, которые соответствуют моим критериям, а затем закончить вызовом last().authorUser. Что-то типа:

comments.each {
if (it.authorUser.toString().contains(user.toString())) {    
// Here is where I'd want to remove the element from the list**
}
}
comments.last().authorUser  // then store the last element as my most recent comment. 

Есть смысл? Я новичок в Groovy, так что я полностью подозреваю кучу головоломок. Большинство примеров, с которыми я столкнулся, касались числовой проверки... как бы в тупике.


person Hamsandwhich    schedule 09.10.2013    source источник


Ответы (2)


Вы можете использовать Collection.removeAll( ): он изменяет коллекцию, удаляя элементы, соответствующие переданному условию закрытия.

comments.removeAll {
    it.authorUser.toString().contains(user.toString())
}
comments.last().authorUser
person Kai Sternad    schedule 09.10.2013
comment
Я забыл принять этот ответ - 2 года назад. Я чувствую себя дураком. Извините, Кай, спасибо за помощь! - person Hamsandwhich; 03.05.2015

В настоящее время можно использовать Java removeIf { it -> it.isNotDog() }. См. пример в SO.

person adrien    schedule 18.02.2019