Groovy在这里。我需要使用一些复杂的逻辑来过滤Set
个POGO,而我正在努力理解正确使用findAll
闭包。
@Canonical
class Widget {
String name
Boolean fizzbuzz
}
...
Set<Widget> filter(Integer isHidden, Set<Widget> inputWidgets) {
inputWidgets.findAll { widget ->
Foobar foobar = FoobarHelper.getFoobarByWidget(widget)
// Logic:
// If isHidden is 0 and no foorbar exists for the given widget,
// then we want to add this widget to the collection being
// returned...
if(isHidden.intValue() == 0 && !foobar) {
// Add this widget to collection being returned
???
}
// ...but if isHidden is 1 and a foobar does exist for the given
// widget, then we want to add this widget to the collection as
// well.
else if(isHidden.intValue() == 1 && foobar) {
// Add this widget to collection being returned
???
}
}
}
再次,过滤逻辑是:
isHidden == 0
和FoobarHelper.getFoobarByWidget(...)
返回null
,则将当前widget
添加到要返回的集合中;和isHidden == 1
和FoobarHelper.getFoobarByWidget(...)
返回非null
,则将当前widget
添加到要返回的集合中我认为我的逻辑实现是正确的,我只是在努力解决如何将当前widget
添加到返回集合(其中???是)。 有什么想法吗?
答案 0 :(得分:1)
似乎应该只是:
@Canonical
class Widget {
String name
Boolean fizzbuzz
}
...
Set<Widget> filter(Integer isHidden, Set<Widget> inputWidgets) {
inputWidgets.findAll { widget ->
Foobar foobar = FoobarHelper.getFoobarByWidget(widget)
(isHidden.intValue() == 0 && !foobar) || (isHidden.intValue() == 1 && foobar)
}
}
在这一行中:
(isHidden.intValue() == 0 && !foobar) || (isHidden.intValue() == 1 && foobar)
你正在检查这两个条件。满足其中任何一个的所有元素都将添加到返回的集合中。