使用contains来比较通用arraylist中的引用

时间:2011-11-15 04:57:54

标签: java generics collections arraylist contains

好的,我正在尝试比较通用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”。

我希望这是有道理的。如果需要,我可以发布整个代码,但我想避免这样做,因为它的大学作业,我不希望有人偷走整个东西。

非常感谢。

2 个答案:

答案 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结构或初始化变量不变,数字就会排成一行。我可能会失去一些分数但老实说,此时我只想完成它。