У меня есть куча объектов класса Puzzle
. Я переопределил equals()
и hashCode()
. Когда пришло время представить решения для пользователя, я бы хотел отфильтровать все «похожие» головоломки (по стандарту, который я определил), поэтому пользователь видит только один из них.Java: Equalator? (удаление дубликатов из коллекции объектов)
Сходство транзитивно.
Пример:
Result of computations:
A (similar to A)
B (similar to C)
C
D
В этом случае, только А или Д и В или С будет представлена пользователю, - но не две подобные головоломки. Две одинаковые головоломки одинаково важны. Важно только, чтобы они не показывались пользователю.
Для этого я хотел использовать ADT, который запрещает дубликаты. Тем не менее, я не хочу изменять методы equals()
и hashCode()
, чтобы вместо этого вернуть значение сходства. Есть ли Equalator
, как Comparator
, что я могу использовать в этом случае? Или я должен делать это иначе?
Класс, над которым я работаю, - это головоломка, которая поддерживает сетку букв. (Подобно Scrabble.) Если головоломка содержит одни и те же слова, но находится в другой ориентации, она считается похожей. Таким образом, следующие озадачить:
(2, 2): A
(2, 1): C
(2, 0): T
бы быть похожа на:
(1, 2): A
(1, 1): C
(1, 0): T
Как сходство вычисленным? Например, если все головоломки дают целочисленное значение, вы можете создать Hashmap из int -> Puzzle, округляя каждое полученное значение до некоторого порога подобия. –
см. Выше для уточнения –