JDK8的lambda方式List转Map的操作方法

 更新时间:2024年04月30日 10:01:40   作者:诸葛小猿  
account是一个返回本身的lambda表达式,其实还可以使用Function接口中的一个默认方法代替,使整个方法更简洁优雅,这篇文章主要介绍了JDK8的lambda方式List转Map,需要的朋友可以参考下

JDK8的lambda方式List转Map

遍历

public void forEach(Map<Long, String> map) {
	map.forEach((k, v) -> {
		System.out.println("k=" + k + ",v=" + v);
	});
}

list转map

代码如下:

public Map<Long, String> getIdNameMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername));
}

list转成实体本身map

public Map<Long, Account> getIdAccountMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getId, account -> account));
}

account -> account是一个返回本身的lambda表达式,其实还可以使用Function接口中的一个默认方法代替,使整个方法更简洁优雅:

public Map<Long, Account> getIdAccountMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getId, Function.identity()));
}

list转map:重复key处理

public Map<String, Account> getNameAccountMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity()));
}

这个方法可能报错(java.lang.IllegalStateException: Duplicate key),因为name是有可能重复的。toMap有个重载方法,可以传入一个合并的函数来解决key冲突问题:

public Map<String, Account> getNameAccountMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2));
}

这里只是简单的使用后者覆盖前者来解决key重复问题。
举例:

        List<TDeliveryOperation> tDeliveryOperations = tDeliveryOperationMapper.selectList(wrapper1);
        Map<Long, TDeliveryOperation> operationMap = tDeliveryOperations.stream()
                .collect(Collectors.toMap(
                        TDeliveryOperation::getOrderId,
                        Function.identity(),
                        (key1, key2) -> {
                            // 如果存在多条记录  选择最后更新时间最大的
                            if (key1.getLastUpdatedAt() != null
                                    && key2.getLastUpdatedAt() != null
                                    && key1.getLastUpdatedAt().getTime() >= key2.getLastUpdatedAt().getTime()) {
                                return key1;
                            }
                            return key2;
                        })
                );

指定具体收集的map

toMap还有另一个重载方法,可以指定一个Map的具体实现,来收集数据:

public Map<String, Account> getNameAccountMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2, LinkedHashMap::new));
}

到此这篇关于JDK8的lambda方式List转Map的文章就介绍到这了,更多相关JDK8 List转Map内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot中实现定时任务应用实践

    Spring Boot中实现定时任务应用实践

    定时任务一般是项目中都需要用到的,可以用于定时处理一些特殊的任务。下面这篇文章主要给大家介绍了关于Spring Boot中实现定时任务应用实践的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2018-05-05
  • Spring Boot教程之利用ActiveMQ实现延迟消息

    Spring Boot教程之利用ActiveMQ实现延迟消息

    这篇文章主要给大家介绍了关于Spring Boot教程之利用ActiveMQ实现延迟消息的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • 最全面的JVM优化经验总结

    最全面的JVM优化经验总结

    这篇文章主要介绍了最全面的JVM优化经验总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • Java实现Web应用中的定时任务(实例讲解)

    Java实现Web应用中的定时任务(实例讲解)

    下面小编就为大家分享一篇Java实现Web 应用中的定时任务的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • Java程序生成Access文件代码实例

    Java程序生成Access文件代码实例

    这篇文章主要介绍了Java程序生成Access文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • springboot启动时没有日志的原因分析

    springboot启动时没有日志的原因分析

    这篇文章主要介绍了springboot启动时没有日志的原因分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java后端中dto、vo、entity的区别浅析

    Java后端中dto、vo、entity的区别浅析

    这篇文章主要给大家介绍了关于Java后端中dto、vo、entity区别的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-01-01
  • Java的垃圾强制回收实例分析

    Java的垃圾强制回收实例分析

    这篇文章主要介绍了Java的垃圾强制回收,结合实例形式分析了java垃圾强制回收的相关原理及实现方法,需要的朋友可以参考下
    2019-08-08
  • Spring笔记-@Order注解和Ordered接口解析

    Spring笔记-@Order注解和Ordered接口解析

    这篇文章主要介绍了Spring笔记-@Order注解和Ordered接口,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 细数java for循环中的那些坑

    细数java for循环中的那些坑

    这篇文章主要介绍了Java for循环方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07

最新评论