Wie multiplizieren Sie Werte in einer Liste mit java-8-streams
Gibt es eine Summe() Methode äquivalent in Strom durchführen können, die Multiplikation von Werten in einen Datenstrom?
Habe ich eine Liste von ganzen zahlen wie diese :
List<Integer> listOfIntegers = new ArrayList<>();
listOfIntegers.addAll(Arrays.asList(1,4,2,7,5));
Ich bin in der Lage, um die Summe aller Ganzzahlen, aber nicht in der Lage zu finden, eine API, die kann multiplizieren Sie die Werte und geben Sie die Ausgabe.
listOfIntegers.stream().mapToInt(a -> a).sum();
Wenn ich versuche, verwenden Sie forEach zu tun, dann kann ich nicht speichern das Ergebnis als nur final Variablen werden darf im inneren eingesetzt werden.
Gibt es irgendwelche alternativen?
- Schauen Sie in diesen link, werden Sie wahrscheinlich erhalten Sie Ihre Antwort. codereview.stackexchange.com/questions/78484/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, reduzieren der Bäche, sollte es helfen.
Wie:
Diese link bietet weitere Informationen, wie Sie verwenden, zu reduzieren.
IntStream.of(1,4,2,7,5).reduce(1, (a, b) -> a * b)
Optional
, dann können Sie drop das erste argumentreduce
.Einer Sache, zum im Verstand zu halten, wenn die Multiplikation eine unbekannte Anzahl von
ints
ist die Möglichkeit des overflows. Anstatt(a,b) -> a*b
ist es sicherer, verwendenMath::multiplyExact
, die eine Ausnahme werfen auf overflow:Alternativ können Sie auch für große Ergebnisse durch die Reduzierung auf
BigInteger
:Reduktion mit einer Identität, die zurück
1
oderBigInteger.ONE
wenn die Liste leer ist, das kann nicht sein, was Sie wollen. Wenn Sie möchten, behandelt den Fall der leeren Liste, entfernen Sie das erste argumentreduce
und befasst sich dann mit den daraus resultierendenOptional
.