164. Java Lambda 表达式 - Java 函数式编程小技巧:认识 Function.identity()

164. Java Lambda 表达式 - Java 函数式编程小技巧:认识 Function.identity()

Java 中,有时你只需要一个什么都不做、原样返回输入参数的函数,这种函数叫做:

身份函数(Identity Function

Java 为此提供了一个静态工厂方法:Function.identity()


🎯 语法示例:

Function<String, String> id = Function.identity();

这个函数的作用非常简单:

  • 你传进去什么,它就原样返回什么。
  • 就像一面镜子 —— “我不做任何处理,只是把你照样返回。”

📦 使用 identity 的场景举例

✅ 在 Map 操作中保持值不变

List<String> names = List.of("Alice", "Bob", "Charlie");

Map<String, String> nameMap = names.stream()
    .collect(Collectors.toMap(Function.identity(), Function.identity()));

System.out.println(nameMap); 
// 输出: {Alice=Alice, Bob=Bob, Charlie=Charlie}

这里我们把每个字符串作为 keyvalue 放进 map 中:

  • Function.identity() 就省去了你重复写 x -> x 这种形式。

🧠 什么时候使用 identity()

场景 举例 优势
保持原样返回 .map(Function.identity()) 更简洁,更表达意图
创建 key-value 映射时值不变 .toMap(Function.identity(), ...) 避免重复写 lambda
作为默认值函数 默认值函数为 “保持原值” 直观、清晰

💡 类比理解

函数类型 示例 作用
加工函数 s -> s.toUpperCase() 对输入做修改
身份函数 s -> sFunction.identity() 保持输入不变

🧪 小练习题

  1. 写一个 List<Integer>,使用 stream().map(Function.identity()) 来演示 identity 函数是否真的不改变值。
  2. Collectors.toMap(Function.identity(), x -> x.length()) 把字符串列表变成 map,其中键是字符串本身,值是它的长度。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容