Java
Python前端运维数据库
Java
Java
  • 新特性
    • Record
    • Optional
  • 面向对象
    • 面向对象基础
    • 构造方法
    • 继承与多态
    • 接口
    • 修饰符
    • 代码块
    • 接口(Interface)
    • 枚举类
  • IO流
    • IO
      • 字节流
      • 字符流
      • 缓冲流
      • 转换流
      • 操作ZIP
      • File 对象
    • NIO
      • Channel和Buffer
      • 异步文件通道AsynchronousFileChannel
      • Selector
      • Path/Files/Pipe
  • 反射
  • 内存分配
  • 集合
    • 简介
    • List
    • Set
    • Map
    • EnumMap
  • 日期与时间
    • Date和Calendar
    • Java8 新时间 ✨
      • LocalDateTime
      • ZonedDateTime
      • Duration
    • 时间格式化
      • SimpleDateFromat
      • DateTimeFormatter ✨
    • Instant
    • 实践
  • 网络编程
    • IP 地址
    • 网络模型
    • TCP 编程
    • UDP 编程
    • HTTP 编程
  • 加密和安全
  • 并发编程
    • 多线程
    • 线程与进程的区别
    • 线程组和线程优先级
    • 线程池
    • 线程锁
  • 异步任务
    • Future
    • CompletableFuture
      • 开启异步任务
      • 串行任务方法
      • 并行任务方法
      • 任务结束方法
      • 异常处理方法
      • 查看状态方法
      • 设置任务结果方法
  • 执行系统命令
  • Stream 流
    • Stream 流的创建
    • Stream 流串行与并行
    • Stream 流中间操作
    • Stream 流终端操作
  • Lambda 表达式
    • Lambda 表达式简介
    • Lambda 表达式语法
    • 方法引用
  • String
  • StringBuffer
由 GitBook 提供支持
在本页
  • Stream 转换为其他数据类型
  • Stream 对基本数据类型的支持

这有帮助吗?

  1. Stream 流

Stream 流的创建

Stream 的创建方式有多种,可以通过集合、数组、值、函数等来创建 Stream。常见的创建方式有:

  • 通过集合创建 Stream:Collection.stream()、Collection.parallelStream()。

  • 通过数组创建 Stream:Arrays.stream(T array)、Stream.of()。

  • 通过值创建 Stream:Stream.of(T... values)。

  • 通过函数创建 Stream:创建无限流Stream.generate(Supplier s)、创建无限流Stream.iterate(T seed, UnaryOperator f)。

List<String> list = Arrays.asList("apple", "banana", "orange", "pear", "strawberry");
Stream<String> stream = list.stream();
stream.forEach(System.out::println);

上面的代码中,通过list.stream()方法可以创建一个 Stream 对象,然后通过forEach方法遍历输出。

Stream 转换为其他数据类型

既然 Stream 可以从集合、数组、值、函数等创建,那么也可以将 Stream 转换为其他数据类型。常见的转换方式有:

  • Stream 转换为数组:stream.toArray()。

  • Stream 转换为 List:stream.collect(Collectors.toList())。

  • Stream 转换为 Set:stream.collect(Collectors.toSet())。

  • Stream 转换为 Map:stream.collect(Collectors.toMap())。

  • Stream 转换为 String:stream.collect(Collectors.joining())。

  • Stream 转换为 Collection:stream.collect(Collectors.toCollection())。

当 Stream 配合 Collectors 工具类使用时,可以实现更多的转换操作。

// Stream 转换为数组
String[] arr = stream.toArray(String[]::new);
// Stream 转换为 List
List<String> list = stream.collect(Collectors.toList());
// Stream 转换为 Set
Set<String> set = stream.collect(Collectors.toSet());
Map<String, String> map = stream.collect(Collectors.toMap(Function.identity(), Function.identity()));
String str = stream.collect(Collectors.joining());
Collection<String> collection = stream.collect(Collectors.toCollection(ArrayList::new));

Stream 对基本数据类型的支持

Stream 只能引用数据类型,不能直接操作基本数据类型。为了解决这个问题,Stream API 提供了对基本数据类型的支持,分别是IntStream、LongStream、DoubleStream。这三种 Stream 对应于基本数据类型int、long、double。这样可以避免自动装箱和拆箱操作,提高性能。

IntStream intStream = IntStream.of(1, 2, 3, 4, 5);
// 生成 0 到 100 的数字
IntStream.range(0, 100).forEach(System.out::println);
// 生成 0 到 100(包含 100)的数字
IntStream.rangeClosed(0, 100).forEach(System.out::println);
// 求和
int sum = intStream.sum();
LongStream longStream = LongStream.of(1, 2, 3, 4, 5);
// 生成 0 到 100 的数字
LongStream.range(0, 100).forEach(System.out::println);
// 生成 0 到 100(包含 100)的数字
LongStream.rangeClosed(0, 100).forEach(System.out::println);
DoubleStream doubleStream = DoubleStream.of(1.0, 2.0, 3.0, 4.0, 5.0);
// 生成 0 到 100 的数字
DoubleStream.iterate(0, n -> n + 1).limit(100).forEach(System.out::println);
// 生成 0 到 100(不包含 100)的数字
DoubleStream.iterate(0, n -> n + 1).limit(100).forEach(System.out::println);
上一页Stream 流下一页Stream 流串行与并行

最后更新于11个月前

这有帮助吗?