Implementieren des kartesischen Produkts von Collections by Java 8

8

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 )

    
stanleyerror 13.07.2015, 01:52
quelle

2 Antworten

8

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 :

%Vor%

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:

%Vor%     
Misha 13.07.2015, 03:10
quelle
3

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 .

    
Sebastian 10.09.2015 13:24
quelle