gpt4 book ai didi

java - 找出最便宜的商品

转载 作者:行者123 更新时间:2023-11-30 07:04:23 25 4
gpt4 key购买 nike

我对 Java 和 Eclipse 还很陌生。我应该通过通用类找出列表中最便宜的项目并打印出它的参数。我有这个:

public class Store<T extends Item>{

public List<T> items = new ArrayList<T>();

public void addItem(T it){
items.add(it);
}

public T cheapestItem(){
T cheapest;

Collections.sort(items, (i1, i2) -> i1.getPrice().compareTo(i2.getPrice()));

cheapest = Collections.min(items,null);

return cheapest;

}


}

在我的主要 Activity 中:

Store<Item> store = new Store<>();

for (int i = 0; i < items.size(); i++) {
store.addItem(items.get(i).getA());
store.addItem(items.get(i).getB());
}

System.out.println("Cheapest item price is " + store.cheapestItem().getPrice());

我收到一条错误消息:

Exception in thread "main" java.lang.ClassCastException:  com.java.school.B cannot be cast to java.lang.Comparable
at java.util.Collections.min(Unknown Source)
at java.util.Collections.min(Unknown Source)
at com.java.school.Store.cheapestItem(Store.java:20)
at com.java.school.Main.main(Main.java:313)

不幸的是,我不确定我做错了什么,因为 Eclipse 没有在运行前指出它。有人能指出我正确的方向吗?还有其他方法可以做到这一点吗?

最佳答案

最好的解决方案是在 min 方法中使用比较器,而不是 null。这应该允许它获得您需要的结果 - 如果比较器不知道如何比较项目,则它无法获得最小值!您可以删除对 sort 的调用,并将比较器添加到对 min 的调用中。它看起来像这样:

public T cheapestItem(){
return Collections.min(items, (i1, i2) -> i1.getPrice().compareTo(i2.getPrice()));
}

如果返回的是最贵的而不是最便宜的,只需将比较顺序从 t1.compareTo(t2) 更改为 t2.compareTo(t1) 即可。

关于java - 找出最便宜的商品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40390907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com