1. 基本流

之前所有的关于Stream的操作,我们使用的都是java.util.Stream<T>,如果想要将int型的数据存储到流中程序实际上是将其保存到Stream<Integer>Stream<int>是不存在的,但这样就需要将其转换为对应的包装类型,效率较低。

java.util.stream中有DoubleStream、IntStream和LongStream来直接存储基本类型的值,而无需使用包装类

  • IntStream用于存储short、char、byte和boolean类型的数据
  • DoubleStream用于存储float、double型数据

基本类型流的创建同样可以使用of()generate()iterate()。除此之外,IntStream和LongStream有静态的方法range()rangeClosed()用于生成步长为1的整数范围

  1. import java.util.Arrays;
  2. import java.util.OptionalDouble;
  3. import java.util.OptionalInt;
  4. import java.util.stream.IntStream;
  5. public class BasicStream {
  6. public static void main(String[] args) {
  7. private static void TestIntStream() {
  8. System.out.println(Arrays.toString(IntStream.of(1, 4, 3, 15).toArray())); // [1, 4, 3, 15]
  9. System.out.println("--------------------");
  10. System.out.println(Arrays.toString(IntStream.range(1, 10).toArray())); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
  11. System.out.println("--------------------");
  12. System.out.println(Arrays.toString(IntStream.rangeClosed(1, 10).toArray())); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  13. System.out.println("--------------------");
  14. OptionalInt min = IntStream.range(1, 10).min();
  15. System.out.println(min.getAsInt()); // 1
  16. System.out.println("--------------------");
  17. OptionalInt max = IntStream.range(1, 10).max();
  18. System.out.println(max.getAsInt()); // 9
  19. System.out.println("--------------------");
  20. OptionalDouble average = IntStream.range(1, 10).average();
  21. System.out.println(average.getAsDouble()); // 5.0
  22. System.out.println("--------------------");
  23. int sum = IntStream.range(1, 10).sum();
  24. System.out.println(sum); // 45
  25. System.out.println("--------------------");
  26. }
  27. }
  28. }

DoubleStream和LongStream有相似的操作,详细信息可以查看API文档。

2. 并行流

并行流的获取方法:

  • 使用Collection.parallelStream()从任意集合中获取一个并行流
  • 使用parallel()将任意顺序的流转换为并行流