如何缩短这个逻辑

How can shorten this logic

考虑以下 JSON:

"collection1" :
{
    "list1" : ["val1","val2","val3"]
    "list2" : ["val1","val2","val3"] 
},
"collection2" :
{
    "list1" : ["val1","val2","val3"]
    "list2" : ["val1","val2","val3"] 
},

如果 collection1collection2 都没有值,我想 return 为真。现在是否有"no value"可以通过多种方式判断:

你会意识到这会导致很多组合。我可以明显地将其直接翻译成 if-else 块,但我发现它很无聊,或者可能我只是觉得无聊,我的脑袋不工作了,真的需要一些咖啡,因为我无法猜出更简单的东西,更小(如果不可能有一个衬里,则可能只有很少的衬里)并且在这样的simple/dull事情上简洁。或者我只是在浪费时间和思考? Ans 只需将其转换为 if-else 块并离开?

我正在 groovy 中编写代码,因此 Java 解决方案也可以。

(collection1 == null) && 
((collection2 == null) || (nullOrEmpty(collection2.list1) && nullOrEmpty(collection2.list2)))

使用辅助函数(也可以内联)

boolean nullOrEmpty(list) { return list == null || list.empty(); }

也许这就是您要查找的表达式:

!json?.collection1 && !json?.collection2?.list1?.size() && !json?.collection2?.list2?.size()

解释:

!json?.collection1 仅当 json.collection1null

时为真

!json?.collection2?.list1?.size() 仅当 collection2 为 null 或 collection2.list1 为 null 或为空时才为真。

!json?.collection2?.list2?.size() 仅当 collection2 为 null 或 collection2.list2 为 null 或为空时才为真。

这里 ? safe navigation operator 有帮助。

希望对您有所帮助,