java stream api 的核心能力依赖 predicate、function、consumer、supplier 和 binaryoperator 五个函数式接口:predicate 用于过滤(如 n -> n % 2 == 0),function 用于转换(如 string::length),consumer 用于消费(如 system.out::println),supplier 提供初始值(如 arraylist::new),binaryoperator 定义合并逻辑(如 integer::sum)。

Java Stream API 的核心能力,依赖于几个关键的函数式接口。它们不是工具类,而是定义了“做什么”的契约,让 filter、map、forEach 这些操作知道如何处理每个元素。
Predicate:用于判断和过滤
filter 方法背后就是 Predicate 接口,它只接收一个参数,返回 boolean 值。只要满足条件(test 返回 true),该元素就保留在流中。
- 常见写法:
n -> n % 2 == 0(筛选偶数)、s -> s.length() > 3(筛选长度超 3 的字符串) - 可复用:定义为变量后多次使用,比如
Predicate<string> isLongName = s -> s.length() > 5;</string>,再传给多个 filter - 支持组合:用
and()、or()、negate()拼接逻辑,例如isLongName.and(s -> s.startsWith("A"))
Function:用于转换与映射
map、flatMap 等转换类操作都依赖 Function
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 典型用法:
String::length(转为整数)、Employee::getName(提取字段)、s -> s.toUpperCase()(字符串变形) - 注意返回类型:map 的结果流类型由 Function 的 R 决定,比如
map(Integer::toString)会把Stream<integer></integer>变成Stream<string></string> - 避免副作用:Function 应是纯函数,不修改入参,也不产生外部影响
Consumer:用于消费与输出
forEach、peek 这类“执行动作但不产出新流”的操作,靠 Consumer
- 适合日志、调试、写入文件等场景,例如:
System.out::println、log::info、e -> saveToDB(e) - peek 是特殊 Consumer:在中间阶段执行动作,不影响流本身,常用于调试链式流程
- 注意线程安全:若在并行流中使用 Consumer,确保其内部逻辑是线程安全的,否则可能引发竞态
Supplier 和 BinaryOperator:辅助归约与构造
虽然不直接出现在最常用链路里,但在 collect 和 reduce 中频繁露面。
-
Supplier<r></r>提供初始值或新容器,如ArrayList::new作为 collect 的 supplier -
BinaryOperator<t></t>定义两个同类型元素如何合并,如Integer::sum、String::concat,用于 reduce 或 groupingBy 的下游归约 - Collectors 工厂方法已封装大部分场景,但理解 Supplier + BiOperator 才能自定义 Collector
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










