26 Şubat 2019 Salı

DoubleStream Arayüzü

Giriş
Şu satırı dahil ederiz.
import java.util.stream.DoubleStream;
JDK'da FloatStream diye bir sınıf yok!

average metodu
Şöyle yaparız.
double[] x = {5.4, 5.56, 1.0};
double avg = Arrays.stream(x).average.getAsDouble ();
collect metodu
Bu metod Stream arayüzünden farklı olarak Collector parametresi almaz. İmzası şöyle
R collect(Supplier<R>, ObjDoubleConsumer<R>, BiConsumer<R,R>)
iterate metodu
Şöyle yaparız.
double[] sequence = DoubleStream.iterate(200.0, d -> d + 0.001)
  .limit((int) (1 + (399.999 - 200.0) / 0.001)).toArray();
min metodu
Bir OptionalDouble döner. OptionalDouble sınıfının getAsDouble metodu ile değeri alırız. Şöyle yaparız.
double min = DoubleStream.of(array).parallel().min().getAsDouble();
sum metodu
Açıklaması şöyle
In particular, this method may be implemented using compensated summation or other technique to reduce the error bound in the numerical sum compared to a simple summation of double values.
Şöyle yaparız.
Double sum = DoubleStream.builder().add(0.1).add(0.1).add(0.1).add(0.1).add(0.1)
  .add(0.1).add(0.1).add(0.1).add(0.1).add(0.1).build().sum();
System.out.println(sum);
Çıktı olarak 1.0 alırız.
Bu toplama işlemi Kahan summation kullandığı için şu koddan daha az hatay sebep olur.
System.out.println(0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1);
Çıktı olarak 0.9999999999999999 alırız.

Hiç yorum yok:

Yorum Gönder