Groovy null 和 isEmpty 检查子集合

Posted

技术标签:

【中文标题】Groovy null 和 isEmpty 检查子集合【英文标题】:Groovy null and isEmpty checks on child collections 【发布时间】:2016-06-26 21:34:50 【问题描述】:

我有以下用户类:

class User 
    String username
    Set<Role> roles

在应用程序中,我调用SecurityUtils.getUser() 来获取当前登录的用户。如果用户已登录,则此方法返回有效的 User 实例,如果用户未验证/匿名,则返回 null

User user = SecurityUtils.getUser()

我正在尝试编写一个方法,我需要确定用户是否登录,如果他们登录了,如果他们的Roles 集为空或null,我需要做一些特殊的事情:

if(user && !user.roles) 
    // Do something special

我想做这个 Groovier,所以我尝试了:

if(!user?.roles) 
    // Do something special  

这是行不通的。同样,// Do something special 应该在以下情况下执行:

    user 不为空(已验证);和 ( 有一组为空的Roles;或 有一组Roles 是空的)

有什么想法吗?

【问题讨论】:

是什么让你相信user &amp;&amp; !user.roles 不时髦? 这样使用。无论你想出什么“聪明”的东西,都比user &amp;&amp; !user.roles 可读性差。让我们假设!user?.roles 有效。一般开发人员需要多长时间才能理解这种情况的意图? 大声笑——这一定是历史上第一次 Groovy 人推荐使用更重的语法! @smeeb Groovy 的目的不是让每个句子都尽可能小。 【参考方案1】:

如果usernull,则user?.roles 的计算结果为null!user?.roles 的计算结果为!null,即true,因此这与您的第一个条件相冲突。

如果user 不是null,则user?.roles 等价于user.roles,在这种情况下所有条件都满足。

结论:使用user &amp;&amp; !user.roles。我同意 cmets,这更具可读性。

【讨论】:

以上是关于Groovy null 和 isEmpty 检查子集合的主要内容,如果未能解决你的问题,请参考以下文章

如何检查列数据 Spark scala 上的 isEmpty

如何 Groovy-ify 空检查?

StringUtils中isNotBlank和null和isEmpty的联系

null和空字符串的判断方法比较

Map的isEmpty()与==null的区别

判断一个list集合是不是为空,用isEmpty 还是 null的问题???