Java8中关于Function.identity()的使用

 更新时间:2023年05月31日 09:54:28   作者:ACGkaka_  
这篇文章主要介绍了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的使用详解

    这篇文章主要介绍了SpringBoot中FailureAnalyzer的使用详解,FailureAnalyzer拦截启动时异常,将异常转换成更加易读的信息并包装成org.springframework.boot.diagnostics.FailureAnalysis对象,监控应用启动过程,需要的朋友可以参考下
    2023-12-12
  • BeanUtils.copyProperties()所有的空值不复制问题

    BeanUtils.copyProperties()所有的空值不复制问题

    这篇文章主要介绍了BeanUtils.copyProperties()所有的空值不复制问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • SpringBoot中的Redis 缓存问题及操作方法

    SpringBoot中的Redis 缓存问题及操作方法

    这篇文章主要介绍了SpringBoot中的Redis 缓存,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Java实现将Boolean转为Json对象的方法

    Java实现将Boolean转为Json对象的方法

    在Java中,将boolean值转换为JSON对象通常涉及使用JSON库,例如org.json或Gson,这里我们将使用org.json库来进行详细演示,这个库提供了简单且直观的方法来创建和操作JSON对象,需要的朋友可以参考下
    2024-11-11
  • Java 动态模拟操作系统进程调度算法

    Java 动态模拟操作系统进程调度算法

    这篇文章主要介绍了采用java语言编程模拟N个进程采用动态高优先权优先进程调度算法。文中代码具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2021-12-12
  • java线程安全锁ReentrantReadWriteLock原理分析readLock

    java线程安全锁ReentrantReadWriteLock原理分析readLock

    这篇文章主要为大家介绍了java线程安全锁ReentrantReadWriteLock原理分析readLock,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • java 输入一个数字,反转输出这个数字的值(实现方法)

    java 输入一个数字,反转输出这个数字的值(实现方法)

    下面小编就为大家带来一篇java 输入一个数字,反转输出这个数字的值(实现方法)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Spark使用IDEA编写wordcount的示例演示

    Spark使用IDEA编写wordcount的示例演示

    这篇文章主要介绍了Spark使用IDEA编写wordcount的示例演示,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 使用@Valid+BindingResult进行controller参数校验方式

    使用@Valid+BindingResult进行controller参数校验方式

    这篇文章主要介绍了使用@Valid+BindingResult进行controller参数校验方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程

    一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程

    使用SSM(Spring、SpringMVC和Mybatis)已经有段时间了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,下面这篇文章主要给大家介绍了关于整合SSM框架:Spring MVC + Spring + MyBatis的相关资料,需要的朋友可以参考下。
    2017-07-07

最新评论