Java : Produit Cartésien d'une Liste de Listes

J'ai un problème qui est vraiment le genre de la programmation générale de la question, mais mon application est en Java, donc je vais vous donner de mes exemples de cette façon

J'ai une classe comme ceci:

public class Foo {
    LinkedHashMap<String, Vector<String>> dataStructure;

    public Foo(LinkedHashMap<String, Vector<String>> dataStructure){
        this.dataStructure = dataStructure;
    }

    public String[][] allUniqueCombinations(){
        //this is what I need to do
    }
}

J'ai besoin de générer un tableau imbriqué de mon LinkedHashMap que représente chaque combinaison unique de toutes les valeurs du LHM. par exemple, si mon LHM ressemble à ceci (pseudo-code, mais je pense que vous pouvez obtenir l'idée..):

{"foo" => ["1","2","3"], "bar" => ["3","2"], "baz" => ["5","6","7"]};

puis mon String[][] devrait ressembler à ceci:

{
   {"foo","bar","baz"},
   {"1","3","5"},
   {"1","2","5"},
   {"1","3","6"},
   {"1","2","6"},
   {"1","3","7"},
   {"1","2","7"},
   {"2","3","5"},
   {"2","2","5"},
   {"2","3","6"},
   {"2","2","6"},
   {"2","3","7"},
   {"2","2","7"},
   {"3","3","5"},
   {"3","2","5"},
   {"3","3","6"},
   {"3","2","6"},
   {"3","3","7"},
   {"3","2","7"},
}

Je pense que c'est tout, je l'ai fait manuellement (évidemment) donc j'ai peut-être raté un jeu, mais je pense que cela illustre ce que je suis en train de faire. Il n'a pas d'importance quel ordre chaque ensemble est livré dans, aussi longtemps que toutes les combinaisons uniques sont présents. Aussi pour être clair, vous ne savez pas combien d'éléments sont dans le LHM, ni la façon dont de nombreux éléments sont à chaque Vecteur. J'ai trouvé des réponses qui correspondent le cas où vous voulez que chaque combinaison unique de tous les éléments dans un seul tableau, mais rien qui correspond à ce exactement. Si c'est une copie exacte d'une question cependant, veuillez mettre un lien dans la réponse et je vais fermer la question.

mise à jour - j'ai changé les types de chaînes car mon l'exemple du monde réel est en fait des chaînes de caractères. J'ai essayé d'utiliser des entiers pour rendre l'exemple plus lisible, mais les réponses que j'ai obtenu jusqu'à présent ne se traduisent pas bien pour les cordes. Donc, oui ils sont en nombres, mais dans mon cas, ils devront être des chaînes de caractères qui ne serait pas beaucoup de sens pour personne, mais les gens qui utilisent cette application particulière. donc, ce n'est qu'une abstraction.

Petite question - pourquoi Vector? stackoverflow.com/questions/1386275/...
Pourquoi tous les uniqueCombinations de longueur 3? Quelle est la signification de l'entrée [3,2] dans l'entrée?
c'est un Vecteur parce que c'est un Vecteur. Je n'ai pas une bonne explication pour vous. Je ne suis pas vraiment un grand fan de typage statique.
les combinaisons uniques ont une longueur de trois à cause de discbased.size() == 3 dans ce scénario. si il y avait des 4 éléments dans le haut niveau de discbased, puis chacune d'elles serait de 4..
Quelle est la signification de la Integer clé dans le LHM? Si la commande pour la combinaison des tableaux sont basés sur l'ordre des clés, ou la commande du LHM? (c'est à dire si j'ai ajouté des touches de 3,2,1 dans cet ordre pour le LHM, dois-je utiliser la même commande ou 1,2,3) Supposons que j'ai mappages de touches 1,2,4,6...si la combinaison de la matrice de sauter 3 et 5 ou utiliser une valeur spéciale? (par exemple, 0, -1, etc.)

OriginalL'auteur Chris Drappier | 2012-03-06