Groovy группа по большему количеству критериев - PullRequest
0 голосов
/ 07 июня 2018

У меня есть список хэш-карт

list=[{account:"12345"},{account:null},{account:"12345"},account:null}]

Я группирую их по счету этих значений в отдельные списки

list.groupBy({obj -> obj.account}).values().toList();

В результате получаются два списка:

[{account:"12345"},{account:"12345"}],[{account:null},{account:null}]

Это правильно, но мой вопрос в том, могу ли я оставить первый список таким, какой он есть, и каждый раз, когда есть нулевое значение Iполучит отдельный список, например

[{account:"12345"},{account:"12345"}],[{account:null}],[{account:null}]

Или другими словами получить 3 списка карт с целым числом 2

1 Ответ

0 голосов
/ 07 июня 2018

используйте UUID вместо нулевых значений

(groovy)

def list = [[account:"12345"],[account:null],[account:"12345"],[account:null]]
list.groupBy{obj -> obj.account ?: UUID.randomUUID()}.values().each{println it}

или просто новый объект

def list=[[account:"12345"],[account:null],[account:"12345"],[account:null]]
list.groupBy{obj -> obj.account ?: new Object()}.values().each{println it}

обратите внимание, что obj.account ?: new Object() вернет new Object()для нулевых и пустых значений obj.account.

, если вам нужно ограничить выражение только для нулевых значений, используйте obj.account==null ? new Object() : obj.account

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...