如何缩短这种逻辑

时间:2015-08-21 11:28:47

标签: java if-statement design-patterns groovy coding-style

考虑下面的JSON:

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

如果collection1collection2都没有值,我想返回true。现在是否存在“无价值”可以通过多种方式确定:

  • collection1 collection2null
  • 所有 collection1collection2.list1 collection2.list2null
  • collection1null
    • collection2.list1 collection2.list2不包含任何元素
    • collection2.list1null collection2.list2不包含任何元素
    • collection2.list2 null collection2.list1不包含任何元素

你可以意识到这会导致许多组合。我可以直接将它翻译成if-else块,但我发现它很无聊,或者可能是我感到无聊,我的头不工作,真的需要一些咖啡,因为我无法猜出任何更简单的事情,较小的(可能很少衬垫,如果一个衬垫不可能)和简洁这样一个简单/沉闷的东西。或者我只是在浪费时间和思考? Ans只是将其转换为if-else块并离开?

我正在使用groovy编写代码,因此Java解决方案也可以正常工作。

2 个答案:

答案 0 :(得分:0)

AllowAnonymous

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

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

答案 1 :(得分:0)

也许这就是您正在寻找的表达方式:

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

<强>解释

!json?.collection1只有在json.collection1null

时才会出现这种情况

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

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

这里? safe navigation operator有帮助。

希望它有所帮助,