首页 > 其他分享 >Collectors.toMap的几个注意点

Collectors.toMap的几个注意点

时间:2024-07-30 14:54:28浏览次数:12  
标签:map toMap Collectors list value 注意 User

1、Collectors.toMap注意点

1、 key不能有重复,否则会报错
2、value不能为空,否则报空指针

2.解决方法

  1. 不使用stream
    不使用stream时,需要先new一个map,然后手动把list的每一项放入map
    public void test0() {
        User user1 = new User();
        user1.setId(1L);
        user1.setName("1");

        User user2 = new User();
        user2.setId(2L);
        user2.setName("2");

        List<User> list = Lists.newArrayList();
        list.add(user1);
        list.add(user2);
        Map<Long, String> map = new HashMap<>();
        for(User user : list) {
            map.put(user.getId(), user.getName());
        }
    }

2、使用stream流
解决第一个问题:
Collectors.toMap指定merge函数
可以自定义一个merge函数来确定key重复时,如何取value。比如下面这种写法,是保留第一个value。你也可以保留第二个,或者是做一些更复杂的处理。

Map<Long, String> map = list.stream().collect(Collectors.toMap(User::getId, User::getName, (x1,x2)->x1));

解决第二个问题
虽然说Map的value是支持null值的,但是map自己的merge方法天生不支持,此时仅靠自定义merge方法也已经无能为力了。如果仍然想使用Collectors.toMap,需要手动处理null的值,比如:

Map<Long, String> map = list.stream().collect(Collectors.toMap(User::getId, value -> Optional.ofNullable(value.getName()).orElse("")));

标签:map,toMap,Collectors,list,value,注意,User
From: https://www.cnblogs.com/cgy1995/p/18332363

相关文章

  • C/C++ 字符常量的注意事项
    在C/C++中,字符常量是一个或多个字符的固定序列,用于表示程序中的字符值。它们是用单引号('')括起来的单个字符,例如 'a' 或 '1'。在使用字符常量时,有几个重要的注意事项需要考虑:字符长度:字符常量只能包含一个字符。如果你尝试在单引号中包含多于一个字符,比如'ab',这会导致......
  • 通道注意力机制(CA)
    通道注意力机制(ChannelAttention,CA)是一种广泛应用于计算机视觉中的注意力机制。它主要用于提取图像特征中不同通道之间的相关性,以帮助网络更好地聚焦于重要的特征信息。在深度学习中,卷积神经网络(CNN)通常通过堆叠多个卷积层来提取图像的高级特征表示。然而,不同的通道可能对......
  • Json 序列化、反序列化;重复或循环使用时注意事项
    Json序列化问题publicclassTest2{publicstaticvoidmain(String[]args)throwsJsonProcessingException{ObjectMapperobjectMapper=newObjectMapper();objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);Plug......
  • C/C++ 头文件注意事项总结
    C/C++头文件在编程中扮演着至关重要的角色,它们用于声明函数、类、宏、常量等,使得这些声明可以在多个源文件中共享。然而,在使用头文件时,需要注意一些关键事项以避免编译错误、提高代码的可维护性和可读性。以下是一些关于C/C++头文件使用的注意事项:1.防止头文件重复包含头文......
  • 日常学习--调用第三方接口和提供第三方接口时的注意事项--20240728
    1、调用第三方接口的注意事项   接口测试与验证:对第三方接口进行充分的测试,包括功能测试、性能测试和安全测试,确保接口的稳定性和安全性。 验证接口的可用性,包括接口地址、请求方式、请求参数、响应格式等是否正确。   参数校验与日志记录:在调用接口前,对请求......
  • 7.2 Transformer:具有里程碑意义的新模型——自注意力模型
    7.2Transformer:具有里程碑意义的新模型在第7.1章节中我们学习了经典的循环神经网络RNN和其变体长短期记忆网络LSTM。循环神经网络是处理时序数据的主要模型,可以实现很多不同类型的深度学习任务,如:1)序列到类别任务:输入是时序数据,输出是类别,如文本分类、情感分析任务等。2)......
  • 02.系统部署的注意事项
    在做后面的靶场攻击之前,我们首先要做的是:在安装攻防环境系统环境时,要先①设置好系统的网络环境②需要实现虚拟主机系统和宿主机系统中间数据互传方式一:安装vmtools工具,可以实现数据互传方式二:开启系统远程功能,可以实现数据互传③确认系统安全功能是否都关闭/以及更新......
  • YOLOv10改进 | 独家创新- 注意力篇 | YOLOv10引入结合ECA和NRMS形成全新的ERMS注意力
    1. ERMS介绍     (1).整合通道和空间注意力机制:     ECA模块专注于通道间的交互,通过全局平均池化提取每个通道的全局信息,然后通过一维卷积生成每个通道的权重,最终使用Sigmoid激活函数得到通道注意力权重,从而增强重要通道的特征。然而,ECA模块没有考虑到......
  • 【YOLOv8改进- Backbone主干】BoTNet:基于Transformer,结合自注意力机制和卷积神经网络
    YOLOv8目标检测创新改进与实战案例专栏专栏目录:YOLOv8有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLOv8基础解析+创新改进+实战案例介绍摘要我们提出了BoTNet,这是一种概念上简单但功能强大的骨干......
  • 【YOLOv8改进 - 注意力机制】Gather-Excite : 提高网络捕获长距离特征交互的能力
    YOLOv8目标检测创新改进与实战案例专栏专栏目录:YOLOv8有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLOv8基础解析+创新改进+实战案例介绍摘要虽然卷积神经网络(CNNs)中使用自下而上的局部操作符与自......