在Java 8中,Function.identity()是java.util.function.Function接口的一个实用工具方法,以下是核心要点:
一、定义与作用
▸ 身份转换函数 返回一个 Function<T, T> 对象,其行为等价于 t -> t 的Lambda表达式 ▸ 代码可读性 语义上明确表示"不做任何转换"的操作意图
二、典型使用场景
- Stream操作中的占位符
// 示例:统计字符串出现次数(保留原对象)
List<String> list = Arrays.asList("apple", "banana", "apple");
Map<String, Long> countMap = list.stream()
.collect(Collectors.groupingBy(
Function.identity(), // 直接使用元素本身作为key
Collectors.counting()
));
// 输出:{banana=1, apple=2}
- 需要Function参数的API
// 示例:转换Map结构
Map<Integer, String> original = Map.of(1, "A", 2, "B");
// 保持键值不变
Map<Integer, String> copied = original.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey, // Key映射
entry -> entry.getValue() // 等价于 Function.identity()
));
三、与Lambda表达式的等价性

图片.png
四、注意事项
空值处理 当输入为null时,会直接返回null(可能引发NPE)
类型推断 在复杂泛型场景中可能需要显式指定类型:
// 需要类型提示的情况
Function.<String>identity().apply("test");