具有空值检查的Java 8 lambda比较器

Gab*_*ber 22 lambda java-8

我已经使用lambda表达式对集合实现了排序以进行比较.我必须检查空值,所以我想出了比较器的这个解决方案

(a,b)->(
    (a.getStartDate() == null) 
        ? ( (b.getStartDate() == null) ? 0 : -1)
        : ( (b.getStartDate() == null)?1:a.getStartDate().compareTo(b.getStartDate()) )
);
Run Code Online (Sandbox Code Playgroud)

我已经检查了一些问题,比如这个,但它们都是指lambda前代码.

java lambda表达式让我有机会避免两个'if'语句吗?我能以更干净的方式执行任务吗?

flo*_*flo 84

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

Comparator.comparing(YourObject::getStartDate, 
  Comparator.nullsFirst(Comparator.naturalOrder())
)
Run Code Online (Sandbox Code Playgroud)