Работу со Stream я уже описывал в своем учебнике. Однако нужно упомянуть, что существуют специализированные stream-ы: IntStream, LongStream, DoubleStream. У них есть все методы, что и в обычном Stream, но также существуют дополнительные методы: count, average, sum, min, max, range и другие. Эти stream-ы специально созданы для примитивных типов, так как обычный Stream работает с объектами, а значит, в нем будут накладные расходы на автоупаковку и автораспаковку. Специализированные stream-ы есть только для int, long и double. Для других примитивных типов специализированных stream-ов нет.
Примеры использования IntStream:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.OptionalDouble; import java.util.stream.IntStream; public class AverageMain { public static void main(String[] args) { IntStream intStream = IntStream.builder().add(10).add(14).add(-5) .add(33).build(); OptionalDouble average = intStream.average(); average.ifPresentOrElse(v -> System.out.println("average = " + v), () -> System.out.println("Stream was empty.")); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.util.OptionalInt; import java.util.stream.IntStream; public class MinMain { public static void main(String[] args) { IntStream intStream = IntStream.builder().add(1000).add(-56).add(45) .add(3).build(); OptionalInt min = intStream.min(); min.ifPresentOrElse(v -> System.out.println("min element is " + v), () -> System.out.println("Stream was empty.")); } } |
DoubleStream и LongStream работают аналогично, но работают с примитивными типами double и long соответственно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.stream.DoubleStream; public class DoubleMain { public static void main(String[] args) { DoubleStream doubleStream = DoubleStream.builder() .add(10.0) .add(14.4) .add(-5.3) .add(33.8) .build(); double sum = doubleStream.sum(); System.out.println("sum = " + sum); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.OptionalLong; import java.util.stream.LongStream; public class LongMain { public static void main(String[] args) { LongStream longStream = LongStream.builder() .add(555L) .add(-3000L) .add(4_000_000_000L) .add(33L) .build(); OptionalLong max = longStream.max(); max.ifPresentOrElse(v -> System.out.println("max = " + v), () -> System.out.println("Stream was empty")); } } |