合并至少包含一个项目的列表

时间:2015-02-23 15:49:55

标签: groovy

我有一个groovy列表。某些嵌套列表具有某些共同的项目。我希望所有至少有一个共同项目的嵌套列表可以加入到一个列表中,例如:

我的列表清单摘录:

[[buy, order, bought, purchase],
 [opinion, point of view],
 [opinion, belief],
 [buy, purchased],
 [buy, order, purchases]]

(嵌套列表的顺序是随机的)

我想要实现的目标:

[[buy, order, bought, purchase, buy, purchased, buy, order, purchases], 
 [opinion, point of view, opinion, belief]]

有人对如何实现这一点有任何建议吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用inject执行以下操作:

def input = [['buy', 'order', 'bought', 'purchase'],
             ['opinion', 'point of view'],
             ['opinion', 'belief'],
             ['buy', 'purchased'],
             ['buy', 'order', 'purchases']]

input.inject([]) { list, current ->
    list.find { it.intersect(current) }?.addAll(current) ?: list << current
    list
}

因此,在输出列表中找到与当前输入列表相交的元素,如果存在,则将其添加到该输出列表。

如果找不到,请将输入列表添加到输出列表