Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找出最便宜的商品_Java_Eclipse - Fatal编程技术网

Java 找出最便宜的商品

Java 找出最便宜的商品,java,eclipse,Java,Eclipse,我对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 cheapes

我对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;

}


}

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

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

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

如果返回的是最昂贵的而不是最便宜的,只需将比较顺序从
t1.compareTo(t2)
更改为
t2.compareTo(t1)
您的异常显示
T
必须实现
Comparable
,才能使用方法
Collections.min
。您可以在未显示的
项定义中向编译器“证明”(并确保其为真)。声明
Item实现Comparable
,并确保那里有一个
compareTo
方法。

我要做的是创建一个局部变量,它存储找到的最便宜的项并遍历列表

public T cheapestItem() {
    T cheapest = items.get(0);
    for (T item : items) {
        if (item.getPrice() < cheapest.getPrice()) {
            cheapest = item;
        }
    }
}
public T cheapestItem(){
T最便宜=物品。获取(0);
对于(T项:项){
if(item.getPrice()
您正在对列表进行排序,虽然它没有用,但使用了正确的比较器。然后调用min(),您必须这样做,但使用null作为比较器。这在技术上是正确的。但更好的解决方案是继续使用min(),使用正确的比较器(在无用的sort()中使用),并删除sort。查找最小值比对整个列表排序要快,Collections.min()更清楚地表达了意图。@jbnize如果你是对的,那么效率会稍微高一些-我编辑了我的答案。最后一部分是不必要的。这将是最便宜的。比较器可以简化为“comparator.comparing”(Item::getPrice)。
public T cheapestItem(){
    return Collections.min(items, (i1, i2) -> i1.getPrice().compareTo(i2.getPrice()));
}
public T cheapestItem() {
    T cheapest = items.get(0);
    for (T item : items) {
        if (item.getPrice() < cheapest.getPrice()) {
            cheapest = item;
        }
    }
}