【发布时间】:2018-11-16 11:52:10
【问题描述】:
我有一个Photo 对象:
public class Photo {
@Id
private String id;
private LocalDateTime created;
private Integer poNumber;
}
poNumber 可以为部分照片或一组照片中的所有照片为空。我想根据 poNumber 对一组照片进行排序,使最低 poNumber 出现在排序后的集合中。 poNumber 也可能在集合中重复。如果 poNumber 重复,则根据创建的排序(最早创建的照片首先出现)。如果 poNumber 为 null 则根据 created 排序。
我尝试了以下代码:
Set<Photo> orderedPhotos = new TreeSet<>(
Comparator.nullsFirst(Comparator.comparing(Photo::getPoNumber))
.thenComparing(Photo::getCreated));
for (Photo photo : unOrderedPhotos) {
orderedPhotos.add(photo);
}
但只要 poNumber 为空,它就会抛出 NullPointerException。如果 poNumber 不为空,那么它工作正常。我该如何解决这个问题?
【问题讨论】:
-
带有
poNumber = null的元素应该去哪里?在该字段中具有非空值的元素之后还是之前?
标签: java java-8 comparator