Il modo migliore per ottenere statistiche da un Stream
consiste nell'utilizzare le classi ...SummaryStatistics
. Per un Stream<Double>
, questo è DoubleSummaryStatistics
:
List<Double> doubles = getListOfDoubles();
DoubleSummaryStatistics stats = doubles.stream().collect(Collectors.summarizingDouble(Double::doubleValue));
System.out.println(stats.getAverage());
System.out.println(stats.getSum());
Si ottiene raccogliendo il flusso con la summarizingDouble
collettore. Questo raccoglitore prende come argomento ToDoubleFunction
: è una funzione che deve restituire l'analisi double
.
Tali statistiche possono essere ottenute per i valori Integer
, Long
e Double
.
Si noti che il caso generale di conversione di un Collection<Double>
ad un DoubleStream
può essere fatto con il codice hai già:
List<Double> doubles = getListOfDoubles();
DoubleStream stream = doubles.stream().mapToDouble(Double::doubleValue);
Voglio dire, abbiamo sovraccarico Arrays.toStream (...) che potrebbe tornare diverso Stream, quindi perché non c'è nulla di simile per le collezioni? – Anatrollik
Dove c'è qualcosa di simile in "Array"? – RealSkeptic
@RealSkeptic [Array javadoc] (https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html) 'DoubleStream \t flusso statico (double [] array) Restituisce un sequenziale DoubleStream con l'array specificato come sorgente. Simile per IntStream, LongStream PS Scusa per la formattazione – Anatrollik