Я имею в виду, что в настоящее время я разрабатываю слияние между двумя отсортированными наборами элементов типа T (тип не важен, поскольку вы предоставляете средство для сравнения типа, например, в Java, A Comparator<T>
выполнит эту работу).Программирование - Java - Отсоедините алгоритм слияния от действий
То, что я не хочу, - это обязательно объединить обе структуры данных, связанные с процессом слияния (я не хочу, чтобы вся новая структура содержала оба элемента, объединенные). Я хочу, чтобы кто-то наблюдал процесс слияния, чтобы определить, что делать с каждым объединенным элементом в другом классе. Например, хотелось бы иметь что-то вроде этого:
merger.merge(leftCollection,rightCollection,theComparator,theObserver).
Если наблюдатель находится объект смотрит алгоритм слияния и получает уведомление о действиях, я имею в виду:
interface MergeObserver<T> {
/**
* Triggered when the merge algorithm decides to merge only the left entry.
* This case correspond to the case when there is no equivalent entry on the right collection.
*/
public void mergeLeft(T entry);
/**
* Triggered when the merge algorithm decides to merge both entries.
* This case correspond to the case when there exists the same entry on both collections.
*/
public void mergeBoth(T left, T right);
/**
* Triggered when the merge algorithm decides to merge only the right entry.
* This case correspond to the case when there is no equivalent entry on the left collection.
*/
public void mergeRight(T entry);
}
Я уже сделать моя реализация для отсортированных коллекций, но ... Я хотел бы поделиться этим чувством, и здесь возникает вопрос, если кто-то подумал об этом раньше, особенно в Гуавских библиотеках, и какова надлежащая терминология.
Я думаю, что это подходящее место, чтобы спросить об этом. Любая идея относительно существующего решения будет очень оценена. Большое вам спасибо. Не удаляйте мою благодарность. Спасибо.
Я подозреваю, что это слишком специальное назначение для библиотеки общего назначения, так как абстракция MergeObserver полезна только при объединении (или иное присоединения) два набора данных, которые в корпоративном вычислительных системах обычно делаются в базе данных, и редко сделано иначе. – meriton
Используете ли вы компаратор, чтобы всегда сравнивать значение из 'left' со значением из' right'? Если это так, заверните данный компаратор с вашим собственным компаратором, который просто делегирует сравнение, а затем уведомляет наблюдателей в зависимости от результата сравнения ('<0' для' mergeLeft', '== 0' для' mergeBoth 'и'> 0' для 'mergeRight'). –