Kann mithilfe der funktionellen Operationen
Ich bin mit der for-each-Konstrukt in Java wie folgt:
public int getNumRStations() {
int numRoutes = 0;
for (ArrayList<Route> route : routes) {
numRoutes += route.size();
}
return numRoutes;
}
NetBeans zeigt eine Warnung/Hinweis, der besagt "verwenden Können, funktionalen Operationen". Auf automatisch zu lösen, werden die neu generierten code zeigt dies:
public int getNumRStations() {
int numRoutes = 0;
numRoutes = routes.stream().map((route) -> route.size()).reduce(numRoutes, Integer::sum);
return numRoutes;
}
- Warum ist NetBeans Warnung, mir dieses? Ich weiß, ich bin eigentlich nicht blind Vertrauen, IDEs, so dass ist, warum ich Frage.
- Was ist diese neue Zeile machen soll? Ich haben nichts gesehen, wie es im wirklichen Leben oder in der Klasse.
- Das neue Java 8 API und lambda-Ausdruck.
- Sie sind bereits aktualisiert auf java 8?
- Die IDE ist ziemlich Gott verdammt smart.
- Ist das tatsächlich eine Verbesserung? Scheint schwieriger zu Lesen, mehr zu geben, und nicht schneller laufen.
- Die Warnung ist nur mit der code-Stil, und in diesem Fall scheint es, Sie wollen es nicht. Wahrscheinlich können Sie es deaktivieren, irgendwo.
- Es ist nicht so, dass ich will es nicht, ich versuche zu lernen, was es ist und ob es angemessen ist, den neuen Stil (Effizienz, Wartbarkeit betrifft, etc).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass sieht aus wie NetBeans darauf hindeutet, Umgestaltung Summe Betrieb als Java-8 "lambda" oder funktionale Programmierung Betrieb mit der map-und reduce-Funktionen von der Stream-Schnittstelle. Müssen Sie über einen Java 8 JDK mit NetBeans.
Brechen, was es tut:
die "map ()" - Funktion ist die Durchführung einer Zählung aller Ihrer
route
Größen in Ihremroutes
array-Listeden "reduce ()" - Funktion ist dann die Summe der einzelnen Größen zu bekommen das endgültige Ergebnis für die Gesamtzahl der Routen.
Die map() und reduce() Funktionen sind dokumentiert in der Java-8-Dokumentation für die Stream-Schnittstelle zur Verfügung unter diesem link
Diese Antwort-Adressen, "was es ist" aber nicht "warum ist es besser". Ich gebe zu, immer noch das lernen über diese Konstrukte selbst.
Also @paisanco bereits erläutert, über das, was jede Funktion bedeutet.
Ich bin damit einverstanden, dass die änderung der IDE vorgeschlagen, ist komplexer als das original.
Wenn ich wurden gebeten, zu wählen zwischen dem original und der IDE-Empfehlung, dann wähle ich das original.
Allerdings ist hier ein einfacher (und bevorzugte) Möglichkeit, für Ihr Beispiel.
Erklärung ist einfacher in diesem Fall, zu.
Für die einzelnen Routen' element
x
, ändern Sie es inx.size()
und zusammenfassen.x -> x.size()
heißt einem lambda-Ausdruck oder eine anonyme Funktion.Es ist wie
(Ich weggelassen, den Typ des Parameters. Der Typ ist implizit ausgewählt durch den Java-compiler.)
Diese Funktion wird angewendet, um jedes der collection-element. Dies ist, was
mapToInt(lambda exp)
Methode.sum()
Methode scheint nicht zu müssen Erklärung.Einfach, ist es nicht?