Java8中关于Function.identity()的使用
关于Function.identity()的使用
简单介绍
话不多说,直接上JDK源码:
static Function identity() {
return t -> t;
}我们可以看到,Function.identity() 的作用就是 获取一个直接返回入参的函数。
补充:Java8 允许再接口中加入具体方法。接口中的具体方法有两种:default方法 和 static方法。
identify() 就是 Function 接口的一个 static 方法。
使用示例
当我们使用 Stream 想要将集合的某一属性(例如手机号)作为 key,对象本身作为 value 时,就可以在 Collectors.toMap() 中配合使用 Function.identity()。
// 查询数据 List<UserInfo> list = userInfoMapper.getList(); // 获取 手机号-UserInfo 映射 Map<String, UserInfo> phoneNumberMap = list.stream().collect(Collectors.toMap(UserInfo::getPhoneNumber(), Function.identity(), (v1, v2) -> v1));
不适用场景
不适用于 mapToInt()、mapToLong()、mapToDouble() 等需要进行拆箱操作的场景。
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3);
int[] array = list.stream().mapToInt(Function.identity()).toArray();
System.out.println(array.length);
}
因为这三个方法的入参并不是 Function 类型,而是 ToIntFunciton、ToLongFunction、ToDoubleFunction。

Function.identity()的含义
Java 8允许在接口中加入具体方法。
接口中的具体方法有两种,default方法和static方法.
identity()就是Function接口的一个静态方法。
Function.identity()返回一个输出跟输入一样的Lambda表达式对象,等价于形如t -> t形式的Lambda表达式
private static void identity() {
Stream<String> stream = Stream.of("I", "love", "you", "too");
Map<String, Integer> map = stream.collect(Collectors.toMap(Function.identity(), String::length));
System.out.println(map);
}输出结果为:
{love=4, too=3, I=1, you=3}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot中FailureAnalyzer的使用详解
这篇文章主要介绍了SpringBoot中FailureAnalyzer的使用详解,FailureAnalyzer拦截启动时异常,将异常转换成更加易读的信息并包装成org.springframework.boot.diagnostics.FailureAnalysis对象,监控应用启动过程,需要的朋友可以参考下2023-12-12
BeanUtils.copyProperties()所有的空值不复制问题
这篇文章主要介绍了BeanUtils.copyProperties()所有的空值不复制问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-06-06
java线程安全锁ReentrantReadWriteLock原理分析readLock
这篇文章主要为大家介绍了java线程安全锁ReentrantReadWriteLock原理分析readLock,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-10-10
使用@Valid+BindingResult进行controller参数校验方式
这篇文章主要介绍了使用@Valid+BindingResult进行controller参数校验方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-12-12
一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程
使用SSM(Spring、SpringMVC和Mybatis)已经有段时间了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,下面这篇文章主要给大家介绍了关于整合SSM框架:Spring MVC + Spring + MyBatis的相关资料,需要的朋友可以参考下。2017-07-07


最新评论