我有一个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]]
有人对如何实现这一点有任何建议吗? 谢谢!
答案 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
}
因此,在输出列表中找到与当前输入列表相交的元素,如果存在,则将其添加到该输出列表。
如果找不到,请将输入列表添加到输出列表