Java:使用谓词进行因式分解

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

我们可以再分解一个这样的代码:

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引发异常。

java stream predicate
1个回答
0
投票

如果您打算专门使用谓词,则可以将其抽象为:

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);
© www.soinside.com 2019 - 2024. All rights reserved.