Использование содержит для сравнения ссылок в общем массиве - PullRequest
0 голосов
/ 15 ноября 2011

Хорошо, поэтому я пытаюсь сравнить ссылки в общем массиве.

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

Так что в основном мне нужно сравнить ссылки на массивы, чтобы я мог проверить, находится ли Product, являющийся объектом, внутри массива заказов, который является массивом GenericOrder. Если параметр содержит возвращает true, то я хочу напечатать серийный номер заказа, который является методом getSerial. Этот метод работает хорошо, если бы я сказал сказать orders.get (1) .getSerial (); Это вернет "Order: 1".

Надеюсь, это имеет смысл. Я могу опубликовать весь код, если это необходимо, но я бы хотел этого избежать, так как это университетская домашняя работа, и я не хочу, чтобы кто-то крал все это.

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Как говорит МАККАМ в комментариях, это не удается:

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 голос
/ 17 ноября 2011

Решение оказалось HashMap. это не идеально, но это работает.
HashMap связывает каждый объект продукта (они вводят ключ) с номером заказа (значением). Я не мог заставить его ассоциироваться с serialNo, он всегда был установлен на 5, и это действительно не стоило усилий, пытаясь получить его на 100%.
Это работает, хотя, потому что он перебирает ордера, от 0 до order.size (), и так получилось, что при создании ордеров они нумеруются от 0 до. Таким образом, числа выстраиваются до тех пор, пока структура serialNo или инициализированная переменная не изменятся. Вероятно, я потеряю несколько баллов за это, но, честно говоря, на данный момент, я просто хочу, чтобы это было сделано.

...