Java 8 Lambda表达式比较器,带有空值检查

70

我使用 lambda 表达式对集合进行了排序。由于需要检查 null 值,因此我为比较器想出了以下解决方案。

(a,b)->(
    (a.getStartDate() == null) 
        ? ( (b.getStartDate() == null) ? 0 : -1)
        : ( (b.getStartDate() == null)?1:a.getStartDate().compareTo(b.getStartDate()) )
);

我已经查看了一些问题,比如这个,但它们都是关于lambda之前的代码。

Java lambda表达式是否能让我避免两个'if'语句?我能否以更清晰的方式执行此任务?


请参阅以下链接:https://dev59.com/rVoV5IYBdhLWcg3wXNo9,https://dev59.com/85rga4cB1Zd3GeqPsMuD和https://dev59.com/uF8d5IYBdhLWcg3w3FVk。 - Tunaki
谢谢@Tunaki!! 删除问题 - 编辑:无法删除因为已有答案... - Gabber
1个回答

204

您可以使用Comparator中的默认实现:nullsFirstnullsLast

Comparator.comparing(YourObject::getStartDate, 
  Comparator.nullsFirst(Comparator.naturalOrder())
)

2
just thank you :) - Youness HARDI

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接