Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

      • 聚合操作模块
      • 流工具-StreamUtil
        • 1. 流的创建
          • 1.1 从集合创建流
          • 1.2 从数组创建流
          • 1.3 从迭代器创建流
          • 1.4 创建空流
        • 2. 流的转换
          • 2.1 转换为集合
          • 2.2 转换为Map
        • 3. 流的操作
          • 3.1 过滤操作
          • 3.2 映射操作
          • 3.3 排序操作
          • 3.4 去重操作
        • 4. 流的聚合
          • 4.1 统计操作
          • 4.2 最值操作
        • 5. 流的其他操作
          • 5.1 并行流
          • 5.2 限制和跳过
          • 5.3 匹配操作
        • 6. 适用场景
      • 收集器工具-CollectorUtil
      • Map Entry流-EntryStream
    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 聚合操作(stream)
Hutool
2026-01-03
目录

流工具-StreamUtil

StreamUtil是Hutool中用于简化和增强JDK Stream API的核心工具类,提供了丰富的流创建、操作和处理方法,让流操作更加便捷和强大。

# 1. 流的创建

# 1.1 从集合创建流

// 从List创建流
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = StreamUtil.of(list);

// 从Set创建流
Set<String> set = new HashSet<>(list);
Stream<String> setStream = StreamUtil.of(set);

# 1.2 从数组创建流

// 从数组创建流
String[] array = {"a", "b", "c"};
Stream<String> arrayStream = StreamUtil.of(array);

// 从基本类型数组创建流
int[] intArray = {1, 2, 3};
IntStream intStream = StreamUtil.of(intArray);

# 1.3 从迭代器创建流

// 从Iterator创建流
Iterator<String> iterator = list.iterator();
Stream<String> iteratorStream = StreamUtil.of(iterator);

// 从Iterable创建流
Iterable<String> iterable = list;
Stream<String> iterableStream = StreamUtil.of(iterable);

# 1.4 创建空流

// 创建空流
Stream<String> emptyStream = StreamUtil.empty();

# 2. 流的转换

# 2.1 转换为集合

// 流转换为List
List<String> resultList = StreamUtil.toList(stream);

// 流转换为Set
Set<String> resultSet = StreamUtil.toSet(stream);

// 流转换为数组
String[] resultArray = StreamUtil.toArray(stream, String.class);

# 2.2 转换为Map

// 流转换为Map
List<User> users = Arrays.asList(new User(1, "张三"), new User(2, "李四"));
Map<Integer, User> userMap = StreamUtil.toMap(users, User::getId, Function.identity());

// 流转换为Map,处理重复键
Map<Integer, User> userMap = StreamUtil.toMap(users, User::getId, Function.identity(), (existing, replacement) -> existing);

# 3. 流的操作

# 3.1 过滤操作

// 过滤非空元素
List<String> list = Arrays.asList("a", null, "b", "", "c");
List<String> nonEmptyList = StreamUtil.filter(list, StrUtil::isNotEmpty);

// 过滤符合条件的元素
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = StreamUtil.filter(numbers, num -> num % 2 == 0);

# 3.2 映射操作

// 映射为新的值
List<String> strings = Arrays.asList("1", "2", "3");
List<Integer> integers = StreamUtil.map(strings, Integer::parseInt);

// 扁平映射
List<List<Integer>> nestedList = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4));
List<Integer> flatList = StreamUtil.flatMap(nestedList, List::stream);

# 3.3 排序操作

// 自然排序
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9);
List<Integer> sortedList = StreamUtil.sorted(numbers);

// 自定义排序
List<User> users = Arrays.asList(new User(2, "李四"), new User(1, "张三"));
List<User> sortedUsers = StreamUtil.sorted(users, Comparator.comparing(User::getId));

# 3.4 去重操作

// 去重
List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 3, 3);
List<Integer> distinctList = StreamUtil.distinct(numbers);

// 根据属性去重
List<User> users = Arrays.asList(new User(1, "张三"), new User(1, "张三"));
List<User> distinctUsers = StreamUtil.distinctBy(users, User::getId);

# 4. 流的聚合

# 4.1 统计操作

// 计数
List<String> list = Arrays.asList("a", "b", "c");
long count = StreamUtil.count(list);

// 求和
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = StreamUtil.sum(numbers);

// 平均值
OptionalDouble average = StreamUtil.average(numbers);

# 4.2 最值操作

// 最大值
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> max = StreamUtil.max(numbers);

// 最小值
Optional<Integer> min = StreamUtil.min(numbers);

// 根据属性求最大值
List<User> users = Arrays.asList(new User(1, "张三"), new User(2, "李四"));
Optional<User> maxUser = StreamUtil.maxBy(users, User::getId);

# 5. 流的其他操作

# 5.1 并行流

// 获取并行流
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> parallelStream = StreamUtil.parallel(list);

# 5.2 限制和跳过

// 限制数量
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> limitedList = StreamUtil.limit(numbers, 3);

// 跳过元素
List<Integer> skippedList = StreamUtil.skip(numbers, 2);

# 5.3 匹配操作

// 全部匹配
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
boolean allMatch = StreamUtil.allMatch(numbers, num -> num > 0);

// 任意匹配
boolean anyMatch = StreamUtil.anyMatch(numbers, num -> num > 3);

// 无匹配
boolean noneMatch = StreamUtil.noneMatch(numbers, num -> num < 0);

# 6. 适用场景

StreamUtil适用于以下场景:

  • 需要从各种数据源便捷地创建流时
  • 需要简化流的转换和收集操作时
  • 需要使用更友好的API进行流操作时
  • 需要对集合、数组等数据进行复杂处理时
  • 希望使用函数式编程风格处理数据时

通过StreamUtil,开发者可以更加便捷地使用流操作,编写更简洁、更易维护的代码,同时享受到函数式编程带来的好处。

聚合操作模块
收集器工具-CollectorUtil

← 聚合操作模块 收集器工具-CollectorUtil→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式