以下代码返回空指针异常:
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());
有人可以帮我理解如何解决这个问题吗?
如前所述,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));