Ich habe vor kurzem begonnen, mit Java 8 zu spielen, nachdem ich in Haskell/Scala schon einiges getan habe. Ich versuche, mit Funktionen höherer Ordnung in Java wie map
oder forEach
zu spielen, und ich kämpfe, um zu verstehen, welche Motivation es war, alles in Richtung Stream
Ideologie zu schieben. Ich verstehe, es ist schön, allgemeine Abstraktion gibt, wird angenommen, faul sein, aber lassen Sie sich ein sehr einfaches, gemeinsames Beispiel betrachten:Java 8 - stream Ideologie
list.map(x -> do_sth(x));
sehr häufig Idiom, das ein List<T>
zurückzukehren erwarten. Nun, in Java 8, ich brauche etw dieser Art tun:
list.stream().map(x -> doSth(x)).collect(Collectors.toList())
Nun, so weit ich das sehen, wird der Strom nicht die Karte gilt bis collect genannt wird, so wird es einen Durchlauf durch die sein Sammlung unter der Haube. Was ich nicht sehen kann ist, warum die üblichen Anwendungsfälle für Karten, Listen wie map.toList()
, list.groupBy()
nicht zu entsprechenden Schnittstellen hinzugefügt werden? Gibt es eine Designentscheidung, die mir hier fehlt?
Was ich nicht verstehe und vielleicht können Sie erklären - warum dies, .collect (Collectors.toList()), wenn es eine ToList() -Methode eingebaut haben könnte? Es scheint mir nur sehr ausführlich und unhandlich zu sein. –
Wenn Sie 'toList' haben, werden Sie wahrscheinlich auch' toSet' und 'toMap' wollen. Aber Sie würden immer noch die "Collect" -Methode wollen, weil sie so flexibel ist. So hätten jetzt einige Sammelvorgänge ihre eigenen dedizierten Convenience-Methoden, während für andere Sie "collect" aufrufen müssten. Vielleicht wäre die Bequemlichkeit die Unordentlichkeit und Widersprüchlichkeit wert, aber die Designer dachten nicht. –
Ich sah, dass viele Codes geschrieben werden müssen: stream() ... collect (Collectors.toList()), anstelle von stream() ... toList() wegen einiger dummer Gedanken von JDK-Designer. Das ist ist ekelhaft. "toList", "toSet", "toMap" sind die am häufigsten verwendeten Beendigungsoperationen. Sie sollten der Stream API hinzugefügt werden. –