Groovy 将 2 个对象列表相交

Groovy Intersect 2 lists of Objects

我正在尝试将 2 个 POGO 列表相交。

我需要在POGO上实现哪些方法/接口?

intersect 方法的文档只说明它必须是一个 Iterable。

list1 = createPOGOList()
list2 = createPOGOList()

list3 = list1.intersect(list2)

其中 list1 和 list2 包含 POGO。

您最安全的选择是 Comparable,而获得 "free" 的最简单方法是通过 Sortable AST 转换。例如

@groovy.transform.Sortable(includes=['id'])
class Pogo {
    Long id
}

def n = { new Pogo(id:it) }

assert [n(1),n(2)].intersect([n(1)])*.id == [1]