首页 > 基础资料 博客日记
Java中 Map转List 、 List转Map 简单好用
2023-08-23 17:48:40基础资料围观460次
这篇文章介绍了Java中 Map转List 、 List转Map 简单好用,分享给大家做个参考,收藏Java资料网收获更多编程知识
1. Map转List
1.1 将Map的key转换为List
public void testMapToList(){
// 创建一个Map
Map<String, Integer> map = new HashMap<>();
map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
// 将Map的key转换为List
List<String> keyList = new ArrayList<>(map.keySet());
// 打印结果
System.out.println(keyList);
}
输出:
[key1, key2, key3]
1.2 将Map的value转换为List
public void testMapToList(){
// 创建一个Map
Map<String, Integer> map = new HashMap<>();
map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
// 将Map的value转换为List
List<Integer> keyList = new ArrayList<>(map.values());
// 打印结果
System.out.println(keyList);
}
输出:
[1, 2, 3]
所以说这两个方法的区别就是在
new ArrayList<>
时选择使用map.values()
还是map.keySet()
2. List转Map
2.1 最普通的List转Map
public void testListToMap(){
// 创建一个List
List<String> list = new ArrayList<>();
list.add("key1");
list.add("key2");
list.add("key3");
// 将List转换为Map
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(key -> key, value -> 0, (v1, v2) -> v1)); // value里默认放一个0
// 打印结果
System.out.println(map);
}
输出:
{key1=0, key2=0, key3=0}
要特别注意里面的
(v1, v2) -> v1)
必须带上。如果你的key里重复的时候没这句话会异常:
java.lang.IllegalStateException: Duplicate key 0
(v1, v2) -> v1
表示当出现重复的键时,选择保留原始的值 v1
,而忽略新值 v2
。
如果你希望在出现重复的键时采取其他操作,例如取最大值、取最小值或者进行求和等操作,您可以在合并函数中编写相应的逻辑。例如,可以使用(v1, v2) -> Math.max(v1, v2)
来选择两个值中的最大值。
2.2 List转Map同时保证顺序
假如我的list的放入顺序变了:
List<String> list = new ArrayList<>();
list.add("key3");
list.add("key2");
list.add("key1");
用第一个方式得到的Map是乱序的,如果想保证顺序,可以借助LinkedHashMap
.
public void testListToMap(){
// 创建一个List
List<String> list = new ArrayList<>();
list.add("key3");
list.add("key2");
list.add("key1");
// 将List转换为Map
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(key -> key, value -> 0, (v1, v2) -> v1, LinkedHashMap::new)); // value里默认放一个0
// 打印结果
System.out.println(map);
}
输出:
{key3=0, key2=0, key1=0}
2.3 List转Map(对象类型且key拼接)
假如有这个User
:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public static class User{
private Integer id;
private String name;
private Integer age;
}
想要id
拼接_
拼接name
作为key
,age
作为value
,转Map。代码:
public void testListToMap2() {
// 创建一个List
List<User> list = new ArrayList<>();
list.add(new User(1,"Tom",10));
list.add(new User(2,"Tim",10));
list.add(new User(3,"Jim",10));
// 将List转换为Map
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(key -> key.getId()+"_"+key.getName(), value -> value.getAge(), (v1, v2) -> v1));
System.out.println(JSON.toJSON(map));
}
输出:
{"3_Jim":10,"2_Tim":10,"1_Tom":10}
2.4 List转Map(id作为key,每个元素作为value)
public void testListToMap2() {
// 创建一个List
List<User> list = new ArrayList<>();
list.add(new User(1,"Tom",10));
list.add(new User(2,"Tim",10));
list.add(new User(3,"Jim",10));
// 将List转换为Map
Map<Integer, User> map = list.stream()
.collect(Collectors.toMap(User::getId, value -> value, (v1, v2) -> v1));
System.out.println(JSON.toJSON(map));
}
输出:
{
"1": {
"name": "Tom",
"id": 1,
"age": 10
},
"2": {
"name": "Tim",
"id": 2,
"age": 10
},
"3": {
"name": "Jim",
"id": 3,
"age": 10
}
}
完结撒花~
文章来源:https://blog.csdn.net/jiuweihu521/article/details/130867637
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 科创活动|基于java的科创微应用平台小程序(源码+数据库+文档)
- 【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
- [HTML]Web前端开发技术27(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
- java.lang.reflect.InaccessibleObjectException: Unable to make final void java.lang.Throwable.setCaus
- Java毕业设计:基于Java在线中药网上销售商城系统毕业设计源代码作品和开题报告
- html2canvas + jspdf 纯前端HTML导出PDF的实现与问题
- SpringBoot+Docker +Nginx 部署前后端项目
- 前几天顺手改的一个安卓启动器,已经获得40多颗星了
- 建行支付对接(H5)
- Java毕业设计:Java杭州城市文化展示系统毕业设计源代码作品和开题报告