Groovy:根据字段值从列表中获取子列表

时间:2014-09-16 06:47:49

标签: groovy

如何根据用户对象的类型对用户对象列表进行分组。例如,我有一个列表如下。

List userList = [userA, userB, userC, userD, userE, userF, userH]

我想将此列表转换为列表。

List userList = [ [userA, userB], [userC, userD, userE, userF], [userH] ] 

根据用户的类型字段进行分组。

2 个答案:

答案 0 :(得分:3)

您可以使用groupyBy()方法:

Map map = users.groupBy { it.type }

返回按类型分组的用户对象的地图。 地图内容如下所示:

[
  typeA : [list of users of typeA], 
  typeB : [list of users of typeB], 
  ..
]

使用collect方法可以轻松地将此地图转换为您需要的列表:

List l = m.collect { key, value -> value }

现在l是一个如下所示的列表:

[ [list of users of typeA], [list of users of typeB], .. ]

全部在一行:

def list = users.groupBy { it.type } .collect { k, v -> v }

答案 1 :(得分:1)

时髦的善良,只有一行代码: - )

def usersByType = users.groupBy({ it.type }).values().toList()