我正在尝试实现一个函数,该函数返回给定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/