列表上的比较器只有空值

问题描述 投票:0回答:1

以下代码返回空指针异常:

Comparator<LocalDate> c = (LocalDate d1,LocalDate d2)-> {return (d1.isAfter(d2) ? 1 : (d1.isBefore(d2)? -1: 0));} ; 
List<LocalDate> list1 = new ArrayList<LocalDate>();
list1.add(null);
list1.add(null);
Optional<LocalDate> lastUsedDate = list1.stream()
                .max(Comparator.nullsLast(c));
System.out.println(lastUsedDate.get());

有人可以帮我理解如何解决这个问题吗?

java-8 comparator
1个回答
0
投票

如前所述Stream#max不允许将

null
值作为结果(因此也不允许
Stream#min
)。

投掷:

NullPointerException - 如果最大元素为空

Stream API 不支持 null,因此如果结果元素是

reduce
(不是缺失!但确实是
findFirst
),
findAny
null
/
null
都不会合作。

你可以这样做:

List<LocalDate> sortedList = new ArrayList<>(list1);
sortedList.sort(Comparator.nullsLast(c));

System.out.println(sortedList.get(sortedList.size() - 1));
© www.soinside.com 2019 - 2024. All rights reserved.