У меня есть кусок кода из старого проекта.
Логика (на высоком уровне) следующая:
Пользователь отправляет серию {id,Xi}
, где id - это первичный ключ объекта в базе данных.
Цель состоит в том, чтобыбаза данных обновлена, но серия значений Xi
всегда уникальна .
Т.е. если пользователь отправляет {1,X1}
и в базе данных у нас есть {1,X2},{2,X1}
, то ввод должен быть отклонен, в противном случае мы получим дубликаты, т.е. {1,X1},{2,X1}
, т.е. у нас будет X1
дважды в разных строках.
На нижнем уровне пользователь отправляет серию пользовательских объектов, которые инкапсулируют эту информацию.
В настоящее время реализация для этого использует "грубую силу", то есть непрерывные циклы for для ввода и набор результатов jdbc для обеспечения уникальности.
Мне не нравится этот подход, и более того, в реальной реализации есть тонкие ошибки, но это уже другая история.
Я ищу лучший подход, как с точки зрения кодирования, так и производительности.
Я думал следующее:
- Создайте
Set
из списка ввода пользователя.Если Set
имеет другой размер, чем список, то ввод пользователя имеет дубликаты. Стоп там. - Загрузка данных из jdbc.
- Создать
HashMap<Long,String>
с помощью ввода пользователя.Ключ является первичным ключом. - Зацикливание набора результатов.Если
HashMap
не contain
ключ с тем же значением, что и идентификатор строки ResultSet, то добавьте его к HashMap
- В конце получите значения
HashMap
как List
. Если этосодержит дубликаты отклонения ввода.
Это алгоритм, который я придумал.
Есть ли лучший подход, чем этот?(Я предполагаю, что я не ошибаюсь в самом алгоритме)