【问题标题】:Combine Comparators in java在java中组合比较器
【发布时间】: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&lt;MyClass&gt;。使用Comparator&lt;? super MyClass&gt;,您允许那些compareObject 实例,但那些没有比较所需的方法。 (不知道为什么你可以这样定义它,我尽量不要过多地考虑? super X...)这也解决了thenComparing的问题。

标签: java comparator chaining


【解决方案1】:

正如@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);

【讨论】:

    猜你喜欢
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2013-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多