好的,我正在尝试比较通用arraylist中的引用。
for (int s=0; s<orders.size(); s++) {
if (orders.get(s).contains(cpCollection.get(m)))
System.out.println(orders.get(s).getSerial());
}
我收到一条错误消息,指出找不到contains方法的符号。 我想我需要提一下,它不是一个普通的arraylist。这是一些更多的代码。
订单就是这个
ArrayList<GenericOrder<Product>> orders = new ArrayList<GenericOrder<Product>>();
班级名称是GenericOrder。这是从文件开头的代码,以清除其他一些东西。
public class GenericOrder<T> {
private ArrayList<T> products;
public GenericOrder() {
products = new ArrayList<T>();
}
}
所以基本上我需要比较数组refences,这样我就可以检查作为对象的Product是否位于order arraylist中,这是一个GenericOrder arraylist。 如果contains返回true,那么我想打印那个命令序列号,这是一个getSerial方法。如果我说order.get(1).getSerial();这个方法工作正常。这将返回“订单:1”。
我希望这是有道理的。如果需要,我可以发布整个代码,但我想避免这样做,因为它的大学作业,我不希望有人偷走整个东西。
非常感谢。
答案 0 :(得分:2)
正如MAKKAM在评论中所说,这是失败的:
GenericOrder<Product> order = orders.get(s);
order.contains( ... ) // Doesn't compile
GenericOrder类没有contains()方法。
您的两个解决方案要么公开内部列表:
order.getProducts().contains( ... ); // Will work
或实现contains()方法:
public class GenericOrder<T> {
private ArrayList<T> products;
public boolean contains(T t) {
return products.contains(t);
}
}
答案 1 :(得分:1)
解决方案最终成为HashMap
。它不完美,但它的工作原理
HashMap
将每个产品对象(它们键)与订单号(值)相关联。我无法将它与serialNo联系起来,它总是设置为5,并且它真的不值得努力让它达到100%。
它可以工作,因为它循环遍历订单,从0到order.size(),而恰好在创建订单时,它们从0开始编号。因此只要serialNo结构或初始化变量不变,数字就会排成一行。我可能会失去一些分数但老实说,此时我只想完成它。