Im Moment kann ich nur das kartesische Produkt zweier Kollektionen implementieren, hier ist der Code:
%Vor%Dieser Code funktioniert in IntelliJ , aber nicht in Eclipse (beide mit Compiler-Compliance-Level von 1,8):
%Vor%Hier ist Pair.java:
%Vor%Wie behebe ich diesen Fehler?
Gibt es eine elegante Möglichkeit, das kartesische Produkt mehrerer Kollektionen zu implementieren? (Angenommen, wir haben die Klasse tuple
)
Eclipse hat Probleme mit der Typinferenz. Wenn Sie einen Typhinweis .<Pair<T1,T2>>flatMap
hinzufügen, kompiliert es sich gut.
Wenn ich einen anderen Ansatz vorschlagen kann, sollten Sie in Betracht ziehen, Ihr kartesianProduct nicht den gesamten Stream und die gesamte Sammlung zu erstellen, sondern lediglich ein Helfer für flatMap
:
Jetzt müssen Sie nur noch Pair
erstellen, wenn das Ergebnis Pair
s enthalten soll und Sie ein kartesisches Produkt höherer Ordnung verwenden können, indem Sie flatMap
mehrmals anwenden:
Hier ist eine Lösung, die auf den Fall verallgemeinert, dass die Anzahl der erforderlichen flatMap-Anwendungen (d. h. die Reihenfolge des Produkts) zur Kompilierzeit nicht bekannt ist.
%Vor%Details dazu finden Sie unter mein eigener Blog .
Tags und Links java java-8 generics collections java-stream