我们可以再分解一个这样的代码:
protected Comparator<Personne> getComparator() {
Comparator<Personne> comparator1 = LambdaUtil.wrapComparator(
personne -> personne != null && personne.Y() != null ?
APIPersonne.getAliasedName(personne.Y().getX()) :
null,
String.CASE_INSENSITIVE_ORDER);
Comparator<Personne> comparator2 = LambdaUtil.wrapComparator(
personne -> personne != null && personne .getY() != null ?
APIPersonne.getAliasedName(personne.getY()) :
null,
String.CASE_INSENSITIVE_ORDER);
Comparator<Personne> comparator3 = LambdaUtil.wrapComparator(
APIPersonne::getZ(), String.CASE_INSENSITIVE_ORDER);
return comparator1.thenComparing(comparator2).thenComparing(comparator3);
}
知道getY()
和getX
引发异常。
如果您打算专门使用谓词,则可以将其抽象为:
Predicate<Personne> predicate = personne -> personne != null && personne.Y() != null;
并进一步将其用作:
Comparator<Personne> comparator1 = LambdaUtil.wrapComparator(
personne -> predicate.test(personne) ? APIPersonne.getAliasedName(personne.Y().getX()) : null,
String.CASE_INSENSITIVE_ORDER);