2013-02-09 2 views
0

Есть ли эффективный способ сравнения элементов списка? Некоторая предыстория вопроса:Сравнить несколько столбцов

Я анализирую данные, а затем сохраняю их в списке. Затем я запрошу Oracle DB для списка, который соответствует некоторым элементам (ID Name Description). Я создаю структуру данных, а затем сохраняю ее в списке. Проблема заключается в том, как сравнивать содержимое. Мне нужно учитывать 4 сценария.

  1. Новые данные полностью новые (добавить строку)
  2. Новых данные в основном соответствует существующим данным (обновление предыдущей строки)
  3. Существуют данные, что существует в БД не в новых данных, но совпадает с некоторые данные. (Статус необходимо изменить, чтобы показать, что проблема была отменена).
  4. данных в точности соответствует (время обновления, если изменилось, то еще не меняют)
+0

Не могли бы вы дать пара примеры того, что вы хотите сделать? – placeybordeaux

+0

Вы точно смотрите, что в базе данных? Что вы должны изменить, список в памяти или обновить базу данных? Вы что-то еще писали, где вы застряли? – vonbrand

+0

Я написал кучу кода, но оказался на той же части сравнения. – user2057882

ответ

0

Создать объект, который описывает строку. Используйте ComparisonChain для вашего функционального требования.

public int compareTo(Foo that) { 
    return ComparisonChain.start() 
     .compare(this.aString, that.aString) 
     .compare(this.anInt, that.anInt) 
     .compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast()) 
     .result(); 
    } 

http://code.google.com/p/guava-libraries/wiki/CommonObjectUtilitiesExplained#equals

+0

Я рассматривал Гуаву, но чувствовал, что не мог делать то, что хотел. Допустим, одна строка выглядит следующим образом (предположим, что первые два столбца идентификатор, что я все равно, что ссылка данные) [а, б, 111222333444] строка 2 выглядит как [а, б, 111222444555] Это Я хочу добавить отдельную строку. Скажем, в том же сообщении, которое я получаю: [a, b, 666,777,888,999] Затем я хочу добавить это как новую строку, а затем обновить строку 1, чтобы получить статус отмены. – user2057882

+0

Извините, что не следует. Но кажется очевидным, что вам нужна ваша собственная реализация. –

0

Если я правильно вас понял, эти методы могут иметь некоторую помощь к вам:

List.contains

Collections.frequency

Collections.sort

+0

Я чувствую, что это слишком примитивно. Существует также предостережение о том, что в списках может не быть одинакового количества столбцов. Когда я запрашиваю db для существующих данных. Я также храню ROWID. Случай с новыми данными не будет иметь ROWID, потому что они еще не находятся в БД. В этом случае List.contains всегда будет возвращать false. – user2057882

Смежные вопросы