Tôi đã tự hỏi liệu có cách nào để đạt được điều sau đây trong vòng một lần lặp qua mảng không. Chỉ cần có hai kết quả khác nhau ngoài luồng.Tính tổng và tổng bình phương cùng một lúc với Luồng
double sum = Arrays.stream(doubles).sum();
double sumOfSquares = Arrays.stream(doubles).map(d -> d * d).sum();
Nếu bạn thấy mình cần nhiều loại thống kê này thì phân lớp [DoubleSummaryStatistics] (https://docs.oracle.com/javase/8/docs/api/java/util/DoubleSummaryStatistics.html) có thể có ý nghĩa. – the8472
Câu hỏi liên quan (sử dụng ý tưởng từ @ the8472) http://stackoverflow.com/questions/36263352/java-streams-standard-deviation – Tunaki
Cách tiếp cận được đề nghị ở đây thực sự là phân lớp 'DoubleSummaryStatistics'. Điều đó nói, hãy cẩn thận. Chúng tôi xem xét bao gồm tổng bình phương trong DSS, nhưng không chọn vì (a) tính toán nhiều hơn mà nhiều người dùng muốn, nhưng quan trọng hơn (b) rất dễ gặp rắc rối bằng số với phương sai tính toán dấu phẩy động bằng tổng các ô vuông. (Squaring làm cho các số lớn lớn hơn và nhỏ hơn, dẫn đến nguy cơ mất dữ liệu khi bạn thêm chúng.) Xem Knuth AOCP, vol 2, sec 4.2.2 để biết thêm chi tiết. –