Ho una serie di valori doppi che desidero sommare e ottenere il valore massimo. I suoni DoubleStream.summaryStatistics()
sono perfetti per questo. Il metodo getSum()
ha una nota API che mi ricorda ciò che ho imparato durante uno dei miei corsi di informatica: la stabilità del problema di sommatoria tende a essere migliore se i valori sono ordinati in base ai loro valori assoluti. Tuttavia, DoubleStream
non consente di specificare il comparatore da utilizzare, verrà utilizzato solo Double.compareTo
se si chiama sorted()
nello stream.Ordinamento (un flusso di) raddoppia in base alla magnitudine assoluta
Così ho raccolto i valori in un final Stream.Builder<Double> values = Stream.builder();
e chiamare
values.build()
.sorted(Comparator.comparingDouble(Math::abs))
.mapToDouble(a -> a).summaryStatistics();
Eppure, questo sembra un po 'lungo e avrei preferito utilizzare il DoubleStream.Builder
al posto del costruttore generico. Ho perso qualcosa o devo davvero usare la versione in scatola del flusso solo per poter specificare il comparatore?
Hai un 'DoubleStream' dato a te usando un'API esterna o lo stai costruendo da solo? – Smutje
Lo sto costruendo da solo. Potrei anche memorizzarli in una doppia []. Ho appena usato lo stream per summaryStatistics. – muued