我正在尝试实现一个函数,该函数返回给定Comparable(通用)列表的最大对象。

我有3个类,我实现了他们的compareTo方法,如果比其他大,则返回1,如果比其他小,则返回-1,如果相等则返回0。

现在,我的问题是了解如何使用通用输入可比较列表。

这是我的函数的签名,以及我到目前为止编写的代码(拒绝在我身上工作):

public static Comparable<?> getMax(List<Comparable<?>> ls) {
    LinkedList<Comparable<?>> tmpComp = new LinkedList<Comparable<?>>();
    for (Comparable<?> c : ls)
        tmpComp.add(c);
    Comparable<?> maxObj = tmpComp.get(0);
    for (Comparable<?> c : tmpComp)
        if (c.compareTo(maxObj) > 0)
            m = c;
    return m;
}


我正在编写一个包含用户和广告的系统。用户和广告都在其上具有“利润”字段的两个类,我在compareTo方法中所做的就是比较这两个(或另一个)中哪个具有更大的利润,然后根据此返回正确的值。第三类通过另一个字段(也就是int)进行比较,该字段指示Quest的级别(int)。

另外,特别是if语句给我一个错误类型“不适用于自变量”。

有什么线索吗?

提前致谢!

最佳答案

阅读您的评论后,建议您将模型重新设计为:

interface ProfitGenerating {
    double getProfit();
}

class User implements ProfitGenerating {
    ...
}

class Advert implements ProfitGenerating {
    ...
}

List<ProfitGenerating> profits = ...;

Optional<ProfitGenerating> maxProfit = profits.stream()
    .max(Comparator.comparingDouble(ProfitGenerating::getProfit));

关于java - 在3个不同的类别上使用可比性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50432409/

10-10 16:19