У меня есть карта с ключом в качестве строки и значением в виде списка строк, аналогичного приведенному ниже -
"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, но не смог.