我有一个问题,如果我能以某种方式使代码像这样工作:
如果它与第一个 predicate 匹配:(it.controller == controllerName && it.actions.contains(actionName))
,它只找到与此 predicate 匹配的那些 predicate ,而不从下面的 predicate 中找到。
如果在第一个 predicate 中找不到任何内容,则会转到第二个 predicate ,并找到所有与第二个 predicate 匹配但与第三个 predicate 不匹配的 predicate 。
ArrayList rule = rules.findAll {
(it.controller == controllerName && it.actions.contains(actionName))
||
(it.controller == controllerName && it.actions.contains("*"))
||
(it.controller == "*" && it.actions.contains("*"))
}
2条答案
按热度按时间bis0qfac1#
使用
findFirst()
代替,这里有一些很好的参考:https://www.baeldung.com/java-stream-findfirst-vs-findany和Find first element by predicate的函数mbskvtky2#
如果我理解正确的话,这个问题应该可以解决:
那就做吧