Warum kann Stream.flatMap keine Sammlung akzeptieren?

8

Als Beispiel für Datenklassen wird Folgendes angegeben:

%Vor%

Vorausgesetzt, ich hätte eine Liste der Länder

%Vor%

Und ich wollte diese in ihre Regionen und ihre entsprechenden Namen streamen. Ich möchte folgendes tun:

%Vor%

Dieser Code wird jedoch nicht kompiliert, da der Rückgabewert von "getRegions" eine Collection (Liste) im Gegensatz zu einem Stream ist, den die flatMap-Methode akzeptiert. Aber da ich weiß, dass jede Sammlung über seine Collection.stream () -Methode gestreamt werden kann, sollte das kein Problem sein. Trotzdem muss ich es wie folgt schreiben:

%Vor%

Was (in einem reicheren Kontext) viel weniger lesbar ist als das erste.

Die Frage ist, gibt es einen Grund, den ich verpasse, um so sperrig zu sein? Ich habe viele Beispiele in unserem Rahmen, in denen ich gezwungen bin, diesen Weg einzuschlagen, wobei ich immer einen sauren Geschmack hinterlasse. (Ich denke, ich muss nur Kotlin zu unseren Projekten hinzufügen und die Stream-Klasse um eine flatMap-Methode erweitern, die eine Collection verwendet: p oder tue ich?)

    
Lukas 09.02.2017, 16:52
quelle

1 Antwort

14

Ein technischer Grund, der nicht ideal ist, könnte aber sein, warum dies nicht gemacht wurde. Sie können einen generischen Typ in Java nicht überladen.

Sie müssen

unterstützen %Vor%

was bedeutet, dass sie nicht mit

überladen werden können %Vor%

Diese beiden Methoden haben nach dem Löschen die gleiche Signatur.

Sie könnten eine Methode hinzufügen

%Vor%

oder

%Vor%

aber es wäre nicht hübsch.

    
Peter Lawrey 09.02.2017, 16:56
quelle