2017-11-16 1 views
-1

Java-8 bietet Stream, um das Array wie folgt zu summieren, unterstützt der Stream product? Wenn Dampf nicht unterstützt, gibt es eine andere Möglichkeit, das Produkt zu berechnen, ohne manuell meine Schleife zu schreiben?Unterstützt Java-8 Produkt von Elementen des Arrays

int[] a = {1, 2, 3, 4}; 
int sum = IntStream.of(a).sum(); 

Antwort

5

sum und andere sind nur Verknüpfungen zu bestimmten reduce Anrufe.

Summe: Gibt die Summe der Elemente in diesem Strom. Dies ist ein Spezialfall der eine Reduktion und ist äquivalent zu:

return reduce(0, Integer::sum); 

Reduce: Führt eine Reduktion auf die Elemente dieses Stroms unter Verwendung des vorgesehen Identitätswert und eine assoziative Akkumulationsfunktion und kehrt der reduzierte Wert.

Dann können Sie so etwas wie schreiben:

int[] a = {1, 2, 3, 4}; 
int prod = IntStream.of(a).reduce(1,(x,y)->x*y); 
+0

Ich bin eigentlich nicht sicher, welcher Ansatz besser deine oder meine ist, denn wenn der Strom ist leer Sie 1 zurückkehren und kehre ich 0 nicht sicher, was ist erwarteter Standard – Lino

+1

@Lino 1 ist normalerweise das leere Produkt. –

+1

@Lino das ist die leere Summe. Stellen Sie sich das so vor: Wenn die Liste nur das gleiche Element enthält, sagen wir 5, dann ist das Ausführen dieser Produktoperation so, als würde man 5 mit der Länge der Liste machen. Nun, wenn die Liste leer ist, ist es wie 5 mit der Potenz von 0, was 1 ist. Hier ist ein Wiki https://en.m.wikipedia.org/wiki/Empty_product –

3

es mit der reduce Methode versuchen. So etwas wie unten:

int product = IntStream.of(a) 
    .reduce((a,b) -> a*b) 
    .orElse(0); // fallback value if stream is empty 
Verwandte Themen