合并至少有一个共同项的列表

Combine lists that have at least one item in common

我在 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]]

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

您可以使用 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
}

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

如果没有找到,将输入列表添加到输出列表