Mi chiedevo se esiste un modo per ottenere quanto segue all'interno di una singola iterazione sull'array. Semplicemente per avere due risultati diversi fuori dal flusso.Calcolo della somma e della somma dei quadrati allo stesso tempo con Stream
double sum = Arrays.stream(doubles).sum();
double sumOfSquares = Arrays.stream(doubles).map(d -> d * d).sum();
Se si ha bisogno di un sacco di questi tipi di statistiche, la sottoclassi [DoubleSummaryStatistics] (https://docs.oracle.com/javase/8/docs/api/java/util/DoubleSummaryStatistics.html) potrebbe avere senso. – the8472
Domanda correlata (utilizzando l'idea da @ the8472) http://stackoverflow.com/questions/36263352/java-streams-standard-deviation – Tunaki
L'approccio consigliato qui è in effetti la sottoclasse di 'DoubleSummaryStatistics'. Detto questo, stai attento. Abbiamo preso in considerazione l'inclusione della somma dei quadrati in DSS, ma abbiamo scelto di non farlo perché (a) è più un calcolo che molti utenti vogliono, ma soprattutto (b) è molto facile ottenere problemi numerici con la varianza in virgola mobile per somma- dei quadrati. (La quadratura rende i grandi numeri più grandi e piccoli più piccoli, portando al rischio di perdere dati quando li aggiungi.) Vedi Knuth AOCP, vol 2, sez 4.2.2 per maggiori dettagli. –