如何缩短这个逻辑
How can shorten this logic
考虑以下 JSON:
"collection1" :
{
"list1" : ["val1","val2","val3"]
"list2" : ["val1","val2","val3"]
},
"collection2" :
{
"list1" : ["val1","val2","val3"]
"list2" : ["val1","val2","val3"]
},
如果 collection1
和 collection2
都没有值,我想 return 为真。现在是否有"no value"可以通过多种方式判断:
collection1
和collection2
都是null
- 所有
collection1
, collection2.list1
和 collection2.list2
都是null
collection1
是 null
和
collection2.list1
and collection2.list2
不包含元素 or
collection2.list1
是null
和collection2.list2
不包含元素或
collection2.list2
是 null
和 collection2.list1
不包含任何元素
你会意识到这会导致很多组合。我可以明显地将其直接翻译成 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.collection1
为 null
时为真
!json?.collection2?.list1?.size()
仅当 collection2
为 null 或 collection2.list1
为 null 或为空时才为真。
!json?.collection2?.list2?.size()
仅当 collection2
为 null 或 collection2.list2
为 null 或为空时才为真。
这里 ?
safe navigation operator 有帮助。
希望对您有所帮助,
考虑以下 JSON:
"collection1" :
{
"list1" : ["val1","val2","val3"]
"list2" : ["val1","val2","val3"]
},
"collection2" :
{
"list1" : ["val1","val2","val3"]
"list2" : ["val1","val2","val3"]
},
如果 collection1
和 collection2
都没有值,我想 return 为真。现在是否有"no value"可以通过多种方式判断:
collection1
和collection2
都是null
- 所有
collection1
,collection2.list1
和collection2.list2
都是null
collection1
是null
和collection2.list1
andcollection2.list2
不包含元素 orcollection2.list1
是null
和collection2.list2
不包含元素或collection2.list2
是null
和collection2.list1
不包含任何元素
你会意识到这会导致很多组合。我可以明显地将其直接翻译成 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.collection1
为 null
!json?.collection2?.list1?.size()
仅当 collection2
为 null 或 collection2.list1
为 null 或为空时才为真。
!json?.collection2?.list2?.size()
仅当 collection2
为 null 或 collection2.list2
为 null 或为空时才为真。
这里 ?
safe navigation operator 有帮助。
希望对您有所帮助,