【问题标题】:Using contains to compare references in generic arraylist使用 contains 比较泛型数组列表中的引用
【发布时间】:2011-12-29 05:20:06
【问题描述】:

好的,我正在尝试比较通用数组列表中的引用。

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<GenericOrder<Product>> orders = new ArrayList<GenericOrder<Product>>();

类名是GenericOrder。这是文件开头的代码,用于清除其他内容。

public class GenericOrder<T> {
private ArrayList<T> products;
public GenericOrder() {
products = new ArrayList<T>();
}
}

所以基本上我需要比较数组引用,以便检查作为对象的产品是否位于订单数组列表内,订单数组列表是一个 GenericOrder 数组列表。 如果包含返回 true,那么我想打印该订单序列号,这是一个 getSerial 方法。如果我说 orders.get(1).getSerial(); 这个方法很好用。这将返回“订单:1”。

我希望这是有道理的。如果需要,我可以发布整个代码,但我想避免这种情况,因为它是大学作业,我不希望有人窃取整个代码。

非常感谢。

【问题讨论】:

  • 编译器说 GenericOrder 没有 contains 方法。只需执行它。顺便说一句,cpCollection 是什么?
  • cpCollection 是另一种类型的数组列表。它包含属于 ComputerParts 的产品。 (计算机部件继承自产品)。

标签: java generics collections arraylist contains


【解决方案1】:

最终解决方案是HashMap。它并不完美,但它有效。
HashMap 将每个产品对象(它们的键)与订单号(值)相关联。我无法让它与序列号相关联,它总是设置为 5,而且尝试 100% 获得它真的不值得。
它之所以有效,是因为它会遍历订单,从 0 到 order.size() 并且恰好在创建订单时,它们从 0 开始编号。因此,只要 serialNo 结构或初始化变量不变,数字就会排列。我可能会因此失去一些分数,但老实说,在这一点上,我只想完成它。

【讨论】:

    【解决方案2】:

    正如 MAKKAM 在 cmets 中所说,这是失败的:

    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);
      }
    }
    

    【讨论】:

    • 我在等待响应时尝试实现包含。出于某种原因,它对我的​​两个收藏都返回 true。我创建了一个 compOrder 数组和 compPartyOrder 数组。我正在测试的计算机部件已添加到 compOrder 但不是另一个,但它以某种方式对两者都返回 true。我使用了您的 contains 方法,而不是我尝试过的方法,但结果相同。我会在早上回来检查。非常感谢你们。
    猜你喜欢
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多