Алгоритм поиска рекурсивной ассоциации и группировки ключей и значений в java - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть карта с ключом в качестве строки и значением в виде списка строк, аналогичного приведенному ниже -

"Abc"- ("a","b")
"Def" -("a")
"Gh" -("b","c","d")
"Ij" -("c")
"Kl"-("e","f")
"Mn"- ("f")
"Op"-("d","g")
"Qr"-("h","i")

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

1st Group -  Keys-("Abc", "Def", "Gh", "Ij", "Op") Values-("a","b","c","d","g")

&

2nd Group - Keys-("Kl","Mn") Values-("e","f")

&

3rd Group - Keys-("Qr") Values-("h","i")

Метод группировки is-

Начните с первой пары значений ключа и поместите ключ и список значений в первую группу. Вот в этом случае "Abc"=> ["a","b"].

Теперь значения a и b также связаны с def и gh. Поэтому добавьте def и gh в эту группу. Кроме того, ключ gh также имеет значения c & d, поэтому поместите их также в группу. Так группа становится (Ab c, def, gh) и (a, b, c, d). Теперь a и b не являются частью какой-либо другой пары «ключ-значение».

Но c и d являются частью ij и op соответственно. Op имеет еще одно значение, кроме d, то есть g. Таким образом, группа будет Keys-("Abc", "Def", "Gh", "Ij", "Op") Values-("a","b","c","d","g"). Теперь a, b, c, d, g больше нигде, поэтому это будет последняя группа.

Аналогичным образом будут идентифицированы и другие группы. Я пытаюсь сделать это в java, но не смог.

...