当前位置: 首页 > news >正文

list转map常用方法

利用Collectors.toMap收集指定属性

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

收集对象实体本身

- 在开发过程中我们也需要有时候对自己的list中的实体按照其中的一个字段进行分组(比如 id ->List),这时候要设置map的value值是实体本身。

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

account -> account是一个返回本身的lambda表达式,其实还可以使用Function接口中的一个默认方法 Function.identity(),这个方法返回自身对象,更加简洁

重复key的情况

 1.覆盖

    在list转为map时,作为key的值有可能重复,这时候流的处理会抛出个异常:Java.lang.IllegalStateException:Duplicate key。这时候就要在toMap方法中指定当key冲突时key的选择。(这里是选择第二个key覆盖第一个key)

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

2.分组

groupingBy()
  • 根据一个字段或者属性分组也可以直接用groupingBy方法,很方便。
Map<Integer, List<Person>> personGroups = Stream.generate(new PersonSupplier()).limit(100).collect(Collectors.groupingBy(Person::getAge));
Iterator it = personGroups.entrySet().iterator();
while (it.hasNext()) {Map.Entry<Integer, List<Person>> persons = (Map.Entry) it.next();System.out.println("Age " + persons.getKey() + " = " + persons.getValue().size());
}
partitioningBy()

可以理解为特殊的groupingBy,key值为true和false,当然此时方法中的参数为一个判断语句(用于判断的函数式接口)

Map<Boolean, List<Person>> children = Stream.generate(new PersonSupplier()).limit(100).collect(Collectors.partitioningBy(p -> p.getAge() < 18));
System.out.println("Children number: " + children.get(true).size());
System.out.println("Adult number: " + children.get(false).size());
Map.computeIfAbsent()
Map<Integer, List<Person>> personMap = new HashMap<>();  for (Person person : people) {  // Use computeIfAbsent to initialize the list if the key doesn't exist  personMap.computeIfAbsent(person.getId(), k -> new ArrayList<>()).add(person);  }  

相关文章:

list转map常用方法

利用Collectors.toMap收集指定属性 public Map<Long, String> getIdNameMap(List<Account> accounts) {return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername)); } 收集对象实体本身 - 在开发过程中我们也需要有时候对自己…...

C++容器适配器的模拟实现-stack、queue、priority_queue

### 容器适配器是将容器转换到其他容器自身不方便使用的地方&#xff0c;但是就容器适配器其本身还是包装的容器&#xff0c;所以这个类模板中各个接口的实现都是调用的容器的接口&#xff0c;因为容器适配器可能适配多个容器&#xff0c;所以这个类模板的模板参数中有一个参数…...

fastapi的docs页面是空白解决

环境&#xff1a;openEuler、python 3.11.6、fastapi 0.115.2 背景&#xff1a;居家办公&#xff0c;默认搭建的fastapi的docs接口为空白 时间&#xff1a;20241016 说明&#xff1a;网上很多教程的缺点是复杂&#xff08;但是能够了解的更清楚&#xff09;&#xff0c;使用…...

浙大数据结构:11-散列4 Hashing - Hard Version

这道题主要在于思路&#xff0c;感觉像个模拟题&#xff0c;用到了线性探测的算法 机翻 1、条件准备 visit数组看这个位置有没有放进来数&#xff0c;num存非负整数&#xff0c;s存未到放入时机的数。 answer存答案。n为总共数量。 #include <iostream> #include<…...

pm2 守护http-server

PM2&#xff08;Process Manager 2&#xff09;是一个用于Node.js应用程序的进程管理器。以下是使用PM2守护HTTP服务器的步骤&#xff1a; 1. 安装PM2 如果你还没有安装PM2&#xff0c;可以使用以下命令安装&#xff1a; npm install pm2 -g 2. 启动HTTP服务器 你需要一个HTT…...

国外电商系统开发-运维系统应用管理

还记得您常用的 service httpd start 、service sshd stop这样的命令吗&#xff1f;这些都是在停止启动服务&#xff0c;为了让研发人员&#xff0c;或者是快速操作服务&#xff0c;这里给大家制定了简单的应用管理。在这里&#xff0c;您可以把上面的命令加入进来&#xff0c;…...

剖析线程池实现原理

前置推荐阅读&#xff1a;java并发之线程池使用-CSDN博客 自定义实现一个带监控的线程池 首先我们继承ThreadPoolExecutor&#xff0c;实现构造函数以及重写beforeExecute和afterExecute两个函数&#xff0c;具体调用我们会在代码实现层面进行详细的分析。 import java.util.…...

【中危】Oracle TNS Listener SID 可以被猜测

一、漏洞详情 Oracle 打补丁后&#xff0c;复测出一处中危漏洞&#xff1a;Oracle TNS Listener SID 可以被猜测。 可以通过暴力猜测的方法探测出Oracle TNS Listener SID&#xff0c;探测出的SID可以用于进一步探测Oracle 数据库的口令。 建议解决办法&#xff1a; 1. 不应该使…...

三维测量与建模笔记 - 简介

计算机视觉相关主题 主要有两个最主要的层面&#xff0c;几何和语义。几何层面描述了客观事实&#xff0c;比如物体的距离、大小、形状、位置等。语义层面则是从人类抽象出的概念出发&#xff0c;描述了物体是什么、行为是什么、为什么&#xff0c;比如自动驾驶场景中识别出信号…...

Glide 简易教程

文章目录 1 引入依赖2 图片形状2.1 圆形 CircleCrop2.2 旋转 Rotate2.3 圆角 RoundedCorners2.4 自定义圆角 GranularRoundedCorners 1 引入依赖 implementation("com.github.bumptech.glide:glide:4.16.0")2 图片形状 2.1 圆形 CircleCrop Glide.with(this).load…...

flutter 使用三方/自家字体

将字体放入assets/fonts下 在pubspec.yaml文件中flutter下添加如下代码&#xff1a; flutter:fonts:- family: MyCustomFontfonts:- asset: assets/fonts/MyCustomFont.ttf 在flutter Text widget中使用字体 import package:flutter/material.dart;void main() > runApp(…...

2024台州赛CTFwp

备注&#xff1a; 解题过程中&#xff0c;关键步骤不可省略&#xff0c;不可含糊其辞、一笔带过。解题过程中如是自己编写的脚本&#xff0c;不可省略&#xff0c;不可截图&#xff08;代码字体可以调小&#xff1b;而如果代码太长&#xff0c;则贴关键代码函数&#xff09;。…...

词根plac-和place、please

英文有一个词根和单词place(v.放&#xff0c;放置 n.位置&#xff0c;地方&#xff1b;位&#xff0c;职位)长得很像&#xff0c;这个词根就是plac-&#xff0c;它有两个语义&#xff1a;高兴&#xff0c;愉悦&#xff1b;平静&#xff0c;抚平。 其实&#xff0c;place这个单…...

ubuntu下route命令详解

buntu下route命令详解 1、显示路由表 route -n2、临时路由设置&#xff0c;重启网卡失效#添加一条路由(发往192.168.62这个网段的全部要经过网关192.168.1.1)route add -net 192.168.62.0 netmask 255.255.255.0 gw 192.168.1.1#删除一条路由 删除的时候不用写网关route del …...

13.java面向对象:面向对象的三大特征

java面向对象&#xff1a;面向对象的三大特征 面向对象的三大特征1.封装get和set规范属性的合法化 2.继承类继承子类调用父类方法super的用法通过super调用父类public的属性super注意点super对比this 方法重写静态方法中奇怪的现象非静态方法 3.多态多态存在的条件多态中成员访…...

【VUE】Vue中的内置组件

Vue2中的内置组件&#xff1a; <component>&#xff1a;动态组件&#xff0c;可以根据传递的 is 属性值渲染不同的组件。<transition>&#xff1a;过渡动画组件&#xff0c;可以在元素插入、更新或移除时添加动画效果。<transition-group>&#xff1a;过渡动…...

若依框架篇-若依框架搭建具体过程、后端源代码分析、功能详解(权限控制、数据字典、定时任务、代码生成、表单构建、接口测试)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 若依框架概述 1.1 若依构建 1.2 后端项目搭建 1.3 前端项目搭建 2.0 利用若依框架生成前后端代码案例 3.0 功能详解 3.1 功能详解 - 权限控制 3.1.1 使用权限控制…...

恢复已删除文件的 10 种安卓数据恢复工具

由于我们现在在智能手机上存储了大量重要文件&#xff0c;因此了解数据恢复工具变得很重要。您永远不会知道什么时候需要使用 安卓 数据恢复工具。 由于不乏 Windows 数据恢复工具&#xff0c;因此从崩溃的计算机中恢复文件很容易。但是&#xff0c;当涉及到从 安卓恢复数据时…...

Internet Download Manager2025快速下载,新功能解锁!

&#x1f31f;下载界的“速度与激情”&#xff1a;Internet Download Manager超燃体验&#xff01;&#x1f525; 嘿&#xff0c;各位小伙伴们&#xff01;&#x1f44b;今天我要来给你们安利一个让我上网冲浪效率翻倍的神奇软件——Internet Download Manager&#xff08;简称…...

传感器应用注意事项

一、通断型传感器 多数活动部件可直接作为导电材料的传感器为通断型传感器&#xff0c;在受力的条件下&#xff0c;其两个引脚的通断状态会发生改变。 常见通断型传感器 单通道按键多通道按键拨码开关接线帽磁力开关轻触开关… 通断型传感器无需供电&#xff0c;其控制环路…...

Livox_ros_driver vs driver2:消息类型详解与ROS生态兼容性避坑指南

Livox_ros_driver与driver2深度对比&#xff1a;消息架构解析与ROS生态适配实战 当Livox发布HAP等新一代激光雷达时&#xff0c;技术团队常面临驱动版本选择的困境。livox_ros_driver与livox_ros_driver2看似只是版本迭代&#xff0c;实则反映了ROS生态中传感器接口标准化的深层…...

华为MateBook D14安装Ubuntu16避坑指南:WiFi/蓝牙/触控板驱动一键搞定

华为MateBook D14安装Ubuntu 16.04驱动优化全攻略 华为MateBook D14作为一款高性价比轻薄本&#xff0c;在安装Ubuntu 16.04时可能会遇到WiFi、蓝牙和触控板驱动不兼容的问题。这主要源于硬件迭代速度远超Linux内核更新周期——你的笔记本搭载了新一代无线网卡和输入设备&#…...

SPIRAN ART SUMMONER优化指南:如何调整参数让生成的图片更符合预期

SPIRAN ART SUMMONER优化指南&#xff1a;如何调整参数让生成的图片更符合预期 1. 理解SPIRAN ART SUMMONER的核心参数 SPIRAN ART SUMMONER作为一款基于Flux.1-Dev模型的图像生成工具&#xff0c;其参数设置直接影响最终输出效果。与普通AI绘画工具不同&#xff0c;它融入了…...

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(五)- 动态配置与性能优化实战(vsetvli/vsetivli/vsetvl)

1. 动态向量配置指令的核心作用 RISC-V向量扩展指令集中最精妙的设计之一&#xff0c;就是允许程序运行时动态调整向量处理参数的机制。想象你正在用不同尺寸的螺丝刀组装家具——当遇到大螺丝就换大号刀头&#xff0c;碰到小螺丝立即切换精密刀头&#xff0c;这就是vsetvli/vs…...

SQLite.Interop.DLL加载失败的3种修复方案 - 从运行库到项目配置全搞定

SQLite.Interop.DLL加载失败的终极解决方案&#xff1a;从运行环境到项目配置深度解析 当你正在开发一个依赖SQLite数据库的C#项目时&#xff0c;突然遇到"无法加载DLLSQLite.Interop.DLL"的错误提示&#xff0c;这绝对是一个令人头疼的问题。作为一名有多年.NET开发…...

从RS485到TCP/IP:Modbus协议V1.1b3的三种组网方式对比(含WireShark抓包分析)

从RS485到TCP/IP&#xff1a;Modbus协议V1.1b3的三种组网方式深度实战解析 在工业自动化领域&#xff0c;Modbus协议已经服役超过40年&#xff0c;却依然保持着惊人的生命力。作为工程师&#xff0c;我们常常面临一个关键抉择&#xff1a;在RS485、Modbus和TCP/IP这三种主流组…...

三步掌握Dark Reader:从入门到精通的护眼浏览解决方案

三步掌握Dark Reader&#xff1a;从入门到精通的护眼浏览解决方案 【免费下载链接】darkreader Dark Reader Chrome and Firefox extension 项目地址: https://gitcode.com/gh_mirrors/da/darkreader Dark Reader是一款能够为任何网站启用深色模式的浏览器扩展&#xff…...

手把手教你用Python打造一个简易图片颜色替换工具(含Tkinter GUI界面)

用Python和Tkinter构建智能图片颜色替换工具&#xff1a;从零到一的完整开发指南 在数字图像处理领域&#xff0c;颜色替换是一个基础但极其实用的功能。想象一下&#xff0c;你有一张产品照片需要快速调整主色调&#xff0c;或者需要将证件照的背景色统一更换——传统方式可能…...

Dark Reader实用指南:解决夜间浏览痛点的高效方案

Dark Reader实用指南&#xff1a;解决夜间浏览痛点的高效方案 【免费下载链接】darkreader Dark Reader Chrome and Firefox extension 项目地址: https://gitcode.com/gh_mirrors/da/darkreader 在数字时代&#xff0c;我们每天面对屏幕的时间越来越长&#xff0c;尤其…...

【AI微实验】这就deepseek对音频处理的理解╮(╯▽╰)╭

【手把手】零基础用PythonLibrosa搞定古琴音高识别&#xff0c;附完整代码1. 为什么要用代码“听”古琴&#xff1f;——传统音乐数字化的第一关1.1 从“泠泠七弦上”到“0和1”&#xff1a;音乐信息检索的价值1.2 核心任务拆解&#xff1a;基频&#xff08;F0&#xff09;是什…...