Comment appeler de Java Flux.collect() de groovy?

Avoir un arrière-plan avec FP Scala je n'aime pas vraiment Groovy de noms pour les méthodes de collecte. Étant donné que certains choix architecturaux ci-dessus, j'ai trouvé à l'aide de Java 8 API de flux (en plus de java.util.Facultatif) dans Groovy code une solution attrayante.

Jusqu'à ce que j'ai touché ce:

def finalCollection = [ 'some', 'items', 'really', 'not', 'important' ].stream()
        .map { aMethodReturningOptional(it) } //map String to Optional<Item>
        .flatMap { it.map(Stream.&of).orElseGet(Stream.&empty) } //convert to Stream<Item>
        .collect() //Groovy's collect, not stream's!

Remarque, il ne fonctionne qu'en Groovy, 2+ - le traitement de fermeture lambda.
Ce qui me dérange, c'est la dernière ligne de l'exemple de code. Groovy se traduit par l'appel à la DefaultGroovyMethods.collect() au lieu de Stream.collect() que je voulais à l'origine de l'utiliser. Bien sûr, la dernière ligne serait:

        .collect(Collectors.toList()) //Should call Java collect, but it doesn't

Il semble contre-intuitif pour moi, qu'une méthode d'extension est appelée à la place de natifs, intégré selon la méthode de la classe.

Comment puis-je réécrire l'exemple pour la Stream.collect() méthode doit être appelée?

Mise à JOUR: Après plus de jouer du violon, j'ai découvert ce problème que j'ai eu à l'origine. J'ai écrit .collect{Collectors.toList()} (note accolades), ce qui a évidemment appelé Groovy méthode, pas de Java. Note à moi-même: n'oubliez pas de quadruple-vérifier avant de poster...

Alors, qu'advient-il si vous appelez collect(Collectors.toList()), au lieu de collect()? Je ne suis pas un super expert, mais puisque vous appelez à frais virés() sans argument, pourquoi groovy appel Stream.collect(), puisque cette méthode attend un Collectionneur comme argument?
Je suis d'accord avec @JBNizet... Si vous appelez le groovy méthode, il va utiliser le groovy méthode. Essayez d'appeler le Java 8 méthode?
OK, après un peu plus de l'expérimentation que j'ai trouvé à ce problème que j'ai eu. Dans une expérience originale que j'ai écrit collect{Collectors.toList()} (note accolades) qui n'est évidemment pas ce qu'elle devrait être. Je suis bête.

OriginalL'auteur Jerzyna | 2015-10-19