有两种类型null
您可以将其添加到您的列表中。你可以有null
Person
参考资料,你可以有Person
s with null
names.
在第一种情况下,您必须申请nullsFirst https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#nullsFirst-java.util.Comparator-到您要使用的基本比较器:
comparator = Comparator.nullsFirst(
Comparator.comparing(Person::getName, String.CASE_INSENSITIVE_ORDER));
如果你有机会null
名称,您需要确保您的密钥永远不会返回null
,或者您申请nullsFirst
to String.CASE_INSENSITIVE_ORDER https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#CASE_INSENSITIVE_ORDER。第二种选择当然要容易得多:
comparator = Comparator.comparing(
Person::getName, Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER));
如果您有两个选择(null
参考and null
名称),您必须合并两个版本并应用nullsFirst
twice:
comparator = Comparator.nullsFirst(
Comparator.comparing(
Person::getName,
Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER)
)
);
如果您像这样链接多个比较,则外部nullsFirst
,这确保了null
Person
s 得到正确排序,可以应用于整个链:
comparator = Comparator.nullsFirst(
Comparator.comparing(
Person::getName,
Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER)
).thenComparing(...)
);