java中具有两个比较的空安全比较器

java中具有两个比较的空安全比较器,java,null,comparator,Java,Null,Comparator,我有一张房间清单。这些房间可以由一个人在特定日期使用,也可以在没有特定日期的情况下计划将来使用。 起初它运行得很好,但是由于我们允许日期为空值,我不能再使用这种排序方法了。 最重要的是,它应该首先按人排序,然后列出日期。空值应位于每个人员列表的底部。我尝试了一点nullFirst(),但没有成功地编写一个无错误代码:D大多数在线示例只有一个比较,而不是两个。(此人永远不会为空) 如果我理解正确,你想要这样的东西: roomTOs.sort(Comparator .comp

我有一张房间清单。这些房间可以由一个人在特定日期使用,也可以在没有特定日期的情况下计划将来使用。 起初它运行得很好,但是由于我们允许日期为空值,我不能再使用这种排序方法了。 最重要的是,它应该首先按人排序,然后列出日期。空值应位于每个人员列表的底部。我尝试了一点nullFirst(),但没有成功地编写一个无错误代码:D大多数在线示例只有一个比较,而不是两个。(此人永远不会为空)


如果我理解正确,你想要这样的东西:

roomTOs.sort(Comparator
            .comparing(
                    personTO::getPersonName)
            .thenComparing(
                    personTO::getUsedDate, Comparator.nullsLast(Comparator.naturalOrder()))
            );

换句话说,您希望首先按名称排序。如果名称相同,则按日期排列,空的日期被视为“最新”。确切地说@SweeperNow我觉得很愚蠢。这看起来很简单,我只是没有想到把它放在“thenComparing”方法中。我尝试了很多复杂的事情,因为我对比较器的理解太差了。谢谢!
roomTOs.sort(Comparator
            .comparing(
                    personTO::getPersonName)
            .thenComparing(
                    personTO::getUsedDate, Comparator.nullsLast(Comparator.naturalOrder()))
            );