Wie kann ich machen das kartesische Produkt mit Java-8-streams?

Habe ich die folgende Auflistung geben:

Map<String, Collection<String>> map;

Ich würde gerne erstellen Sie einzigartige Kombinationen von jeweils map.size() aus einem einzigen Wert in der Auflistung für jeden Schlüssel.

Zum Beispiel nehmen wir an, die Karte sieht wie folgt aus:

A, {a1, a2, a3, ..., an}
B, {b1, b2, b3, ..., bn}
C, {c1, c2, c3, ..., cn}

Das Ergebnis würde ich gerne bekommen würde eine List<Set<String>> Ergebnis der Suche ähnelt (Reihenfolge ist nicht wichtig, es muss nur ein "komplettes" Ergebnis aus allen möglichen Kombinationen):

{a1, b1, c1},
{a1, b1, c2},
{a1, b1, c3},
{a1, b2, c1},
{a1, b2, c2},
{a1, b2, c3},
...
{a2, b1, c1},
{a2, b1, c2},
...
{a3, b1, c1},
{a3, b1, c2},
...
{an, bn, cn}

Dies ist im Grunde ein zählen-problem, aber ich möchte, um zu sehen, ob eine Lösung möglich ist, mit Java-8-streams.

  • Haben Sie Sorge, über die Tasten in der Karte?
  • Technisch, das Ergebnis ist definiert als mit mehreren class ResultEntry {String key, value;}, so dass endgültige Ergebnis ist von Typ List<Set<ResultEntry>>, also ja, ich kümmere mich um den Schlüssel, aber ich dachte, wenn ich die Grundlagen der permutation, die ich herausfinden kann, wie man die Schlüssel in der Zuordnung.
  • Sie haben ein bisschen ein problem, dass die map-keys sind nicht geordnet, es sei denn, es ist ein SortedMap. Dies bedeutet, dass Sie nicht wissen, ob Sie Ihre Antwort beginnen mit {a1,b1,c1} oder {c1,a1,b1} oder eine der anderen 4 Möglichkeiten. Die Frage ist immer noch interessant, aber ohne Anordnung der Tasten, es ist nicht eine Frage, würde nützlich sein im wirklichen Leben. Mit List<Collection<String>> als input vielleicht mehr Sinn machen.
  • Du hast Recht, es könnte sein, eine Liste (da durch die Vereinfachung des Problems mehr zu Kern), aber die Reihenfolge nicht wirklich wichtig ist (Frage aktualisiert). Ich zeigte eine geordnete Ergebnismenge zu verstärken, dass es nur eine Zählung problem. Aber, was noch wichtiger ist, dass die Menge der Permutationen ist "komplett".
  • Ich denke, es ist nicht als "Permutationen"? Wahrscheinlich "Kombinationen"? Muttersprachler, was denkst du?
  • Ich bin nicht native, aber: Kombinationen und Permutationen
  • Dieses problem ist nicht über Permutationen oder Kombinationen. Es sieht mehr wie ein Kartesisches Produkt.
  • Ich kann sehen, von Alex ' Kommentaren, die er ursprünglich wollte-Kombinationen. Das zurückgegebene Ergebnis wird benötigt, um eine List<Set<String>> (nicht Stream), und die Elemente einer Set<String> erlauben nicht die für die Permutationen wie {a1, b2, a1, ...}. Im Einklang mit dieser Abstraktion, es gibt dem Benutzer (also Alex) die Freiheit, um zusätzliche Logik zu beschneiden bestimmte Kombinationen, wenn der Algorithmus und das Ergebnis ist in seiner generischen form, so dass ich denke, es war ein Zufall, dass dieser entpuppte sich als ein Kartesisches Produkt auch.

Schreibe einen Kommentar