java中的组合比较器

java中的组合比较器,java,comparator,chaining,Java,Comparator,Chaining,我有两个比较: Comparator<? super MyClass> COMPARATOR_BY_PRIORITY = Comparator.nullsFirst( Comparator.comparing(c -> c.isEmpty() ? null : -c.getPriority()) ); Comparator<? super MyClass> COMPARATOR_BY_PRICE =

我有两个比较:

Comparator<? super MyClass> COMPARATOR_BY_PRIORITY =
        Comparator.nullsFirst(
                Comparator.comparing(c -> c.isEmpty() ? null : -c.getPriority())
        );

Comparator<? super MyClass> COMPARATOR_BY_PRICE =
        Comparator.nullsFirst(
                Comparator.comparing(c -> c.isEmpty() ? null : c.getPrice())
        );

Comparator正如@tobias_k所指出的,它在没有?超级:

Comparator<MyClass> COMPARATOR_BY_PRIORITY =
        Comparator.nullsFirst(
                Comparator.comparing(c -> c.isEmpty() ? null : -c.getPriority())
        );

Comparator<MyClass> COMPARATOR_BY_PRICE =
        Comparator.nullsFirst(
                Comparator.comparing(c -> c.isEmpty() ? null : c.getPrice())
        );

Comparator<MyClass> COMBINED_COMPARATOR =
    COMPARATOR_BY_PRIORITY.thenComparing(COMPARATOR_BY_FARE);
比较器比较器按优先级排序=
Comparator.nullsFirst(
Comparator.comparing(c->c.isEmpty()?null:-c.getPriority())
);
比较器比较器按比较器价格=
Comparator.nullsFirst(
Comparator.comparing(c->c.isEmpty()?null:c.getPrice())
);
比较器组合比较器=
比较器按优先级排序。然后进行比较(比较器按票价排序);

你的解决方案如何,对你没有帮助吗?不,它不可编译,没有thenComparator可以获取比较器我认为你的比较器应该是
比较器
。使用
比较器
Comparator<MyClass> COMPARATOR_BY_PRIORITY =
        Comparator.nullsFirst(
                Comparator.comparing(c -> c.isEmpty() ? null : -c.getPriority())
        );

Comparator<MyClass> COMPARATOR_BY_PRICE =
        Comparator.nullsFirst(
                Comparator.comparing(c -> c.isEmpty() ? null : c.getPrice())
        );

Comparator<MyClass> COMBINED_COMPARATOR =
    COMPARATOR_BY_PRIORITY.thenComparing(COMPARATOR_BY_FARE);