在两个对象中属性Equal B属性的列表中过滤对象的好方法

时间:2014-01-23 08:02:12

标签: groovy

我有对象列表(名称A),A有属性B和C.我需要在列表中找到B属性与另一个对象的C属性相等的对象。例如:

def objectList = [A1,A2,A3,A4,A5,A6,A7,A8]; 
if A1.B == A2.C then return A1,A2;

有什么好办法吗?

2 个答案:

答案 0 :(得分:6)

您可以使用findAll方法:

def list = []
def matching = list.findAll { A a ->
   a.B == a.C
}

<强>更新

您可以通过这种方式获得所有匹配对象:

def matching = []
list.unique { A a1, A a2 ->
    if (a1.B == a2.C || a1.C == a2.B) {
        matching << a1 << a2
    }
    return 1
}

这是一种hacky解决方案,因为它没有按预期使用unique方法。

答案 1 :(得分:0)

不确定您是否希望结果变平,无论如何这里是一个返回元组列表的解决方案:

def result = list.inject([]) {acc,a1->
    list.each {a2->
        if (!a1.is(a2)  && a1.b == a2.c) {
            acc << [a1,a2]
        }
    }
    acc
}