【发布时间】:2020-03-24 23:38:24
【问题描述】:
我有 2 个比较器:
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<? super MyClass> COMBINED_COMPARATOR =
COMPARATOR_BY_PRIORITY.thenComparing(COMPARATOR_BY_FARE);
【问题讨论】:
-
你的解决方案对你没有帮助吗?
-
不,它不编译,没有 thenComparator 可以得到 Comparator
-
我认为你的比较器应该是
Comparator<MyClass>。使用Comparator<? super MyClass>,您允许那些compare的Object实例,但那些没有比较所需的方法。 (不知道为什么你可以这样定义它,我尽量不要过多地考虑? super X...)这也解决了thenComparing的问题。
标签: java comparator chaining