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

Java List 转map,分组,排序

目录

1.List 排序

1.排序字段无null值

2.排序字段有null值

3.多字段排序

2.List转Map

1.List转成Map,object>

2.List转成Map,string>

3.List>转成Map>,map

4.List>转成Map,object>

5.List>转成Map>,map

6.List>转成Map,string>

3.List分组

方法一:

方法二(不常用):


日常工作中经常需要用到对List集合的分组、排序、转Map等操作,每次都会忘记,然后去网上查,费时又费力,不如自己好好总结一下,提升工作效率和减少bug率。

1.List 排序

参考我写的另外一篇文章,写得更详细: Java8 对象List 排序_java8 list对象排序-CSDN博客 

1.排序字段无null值

Student User{private String name;private int age;
}List<User> list = Lists.newArrayList(new User("lao_wang", 21), new User("lao_wang", 22));

排序方式:

List<User> nList = list.stream().sorted(Comparator.comparing(User::getName)).collect(Collectors.toList());

2.排序字段有null值

Student User{private String name;private int age;
}List<User> list = Lists.newArrayList(new User(null, 23), new User("lao_wang", 21), new User("lao_wang", 22));

排序方式:

List<User> nList = list.stream().sorted(Comparator.comparing(User::getName, Comparator.nullsFirst(String::compareTo))).collect(Collectors.toList());
  • Comparator.nullsFirst: 排序字段为null的对象放在排序后的List最前面 
  • Comparator.nullsLast: 排序字段为null的对象放在排序后的List最后面

3.多字段排序

List按照多个字段排序,同步包含了处理null的功能。

List<User> detailEntityList = list.stream().sorted(Comparator.comparing(User::getName,Comparator.nullsFirst(String::compareTo)).thenComparing(User::getAge,Comparator.nullsFirst(String::compareTo))).collect(Collectors.toList());

2.List转Map

实体类:

public class Person {private String name;private String address;public Person(String name, String address) {this.name = name;this.address = address;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

1.List转成Map<String,Object>

List<Person> list = new ArrayList<>();
Person person1 = new Person("熊大","森林第一个小屋");
Person person2 = new Person("熊二","森林第二个小屋");
Person person3 = new Person("光头强","森林第三个小屋");
Person person4 = new Person("熊大","森林第四个小屋");
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
Map<String,Person> map =  list.stream().collect(Collectors.toMap(Person::getName,each->each,(value1, value2) -> value1));
System.out.println(JSON.toJSONString(map));

结果:2个name为熊大,只保留了第一个,因为Map的key是不能重复的

{“光头强”:{“address”:“森林第三个小屋”,“name”:“光头强”},

“熊大”:{“address”:“森林第一个小屋”,“name”:“熊大”},

“熊二”:{“address”:“森林第二个小屋”,“name”:“熊二”}} 

2.List转成Map<String,String>

List<Person> list = new ArrayList<>();
Person person1 = new Person("熊大","森林第一个小屋");
Person person2 = new Person("熊二","森林第二个小屋");
Person person3 = new Person("光头强","森林第三个小屋");
Person person4 = new Person("熊大","森林第四个小屋");
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
Map<String,String> map =  list.stream().collect(Collectors.toMap(Person::getName,Person::getAddress,(value1, value2) -> value1));
System.out.println(JSON.toJSONString(map));

结果:

{“光头强”:“森林第三个小屋”,

“熊大”:“森林第一个小屋”,

“熊二”:“森林第二个小屋”} 

3.List<Map<String,Object>>转成Map<String,Map<String,Object>>

List<Map<String,Object>> list = new ArrayList<>();
Person person1 = new Person("熊大","森林第一个小屋");
Person person2 = new Person("熊二","森林第二个小屋");
Person person3 = new Person("光头强","森林第三个小屋");
Map<String,Object> map1 = new HashMap<>();
map1.put("id","1");
map1.put("person",person1);
Map<String,Object> map2 = new HashMap<>();
map2.put("id","2");
map2.put("person",person2);
Map<String,Object> map3 = new HashMap<>();
map3.put("id","3");
map3.put("person",person3);
list.add(map1);
list.add(map2);
list.add(map3);
Map<String,Map<String,Object>> map = list.stream().collect(Collectors.toMap(each->Objects.toString(each.get("id"),""),each->each,(key1,key2)->key1));
System.out.println(JSON.toJSONString(map));

 控制台打印日志:

{“1”:{“person”:{“address”:“森林第一个小屋”,“name”:“熊大”},“id”:“1”},

“2”:{“person”:{“address”:“森林第二个小屋”,“name”:“熊二”},“id”:“2”},

“3”:{“person”:{“address”:“森林第三个小屋”,“name”:“光头强”},“id”:“3”}}

4.List<Map<String,Object>>转成Map<String,Object>

List<Map<String,Object>> list = new ArrayList<>();
Person person1 = new Person("熊大","森林第一个小屋");
Person person2 = new Person("熊二","森林第二个小屋");
Person person3 = new Person("光头强","森林第三个小屋");
Map<String,Object> map1 = new HashMap<>();
map1.put("id","1");
map1.put("person",person1);
Map<String,Object> map2 = new HashMap<>();
map2.put("id","2");
map2.put("person",person2);
Map<String,Object> map3 = new HashMap<>();
map3.put("id","3");
map3.put("person",person3);
list.add(map1);
list.add(map2);
list.add(map3);
Map<String,Object> map = list.stream().collect(Collectors.toMap(each->Objects.toString(each.get("id"),""),each->each.get("person"),(key1,key2)->key1));
System.out.println(JSON.toJSONString(map));

结果:

{“1”:{“address”:“森林第一个小屋”,“name”:“熊大”},

“2”:{“address”:“森林第二个小屋”,“name”:“熊二”},

“3”:{“address”:“森林第三个小屋”,“name”:“光头强”}} 

5.List<Map<String,String>>转成Map<String,Map<String,String>>

List<Map<String,String>> list = new ArrayList<>();
Map<String,String> map1 = new HashMap<>();
map1.put("id","1");
map1.put("name","熊大");
map1.put("address","森林第一个小屋");
Map<String,String> map2 = new HashMap<>();
map2.put("id","2");
map2.put("name","熊二");
map2.put("address","森林第二个小屋");
Map<String,String> map3 = new HashMap<>();
map3.put("id","3");
map3.put("name","光头强");
map3.put("address","森林第三个小屋");
list.add(map1);
list.add(map2);
list.add(map3);
Map<String,Map<String,String>> map = list.stream().collect(Collectors.toMap(each->each.get("id"),each->each,(key1,key2)->key1));
System.out.println(JSON.toJSONString(map));

结果:

{“1”:{“address”:“森林第一个小屋”,“name”:“熊大”,“id”:“1”},

“2”:{“address”:“森林第二个小屋”,“name”:“熊二”,“id”:“2”},

“3”:{“address”:“森林第三个小屋”,“name”:“光头强”,“id”:“3”}} 

6.List<Map<String,String>>转成Map<String,String>

List<Map<String,String>> list = new ArrayList<>();
Map<String,String> map1 = new HashMap<>();
map1.put("id","1");
map1.put("name","熊大");
map1.put("address","森林第一个小屋");
Map<String,String> map2 = new HashMap<>();
map2.put("id","2");
map2.put("name","熊二");
map2.put("address","森林第二个小屋");
Map<String,String> map3 = new HashMap<>();
map3.put("id","3");
map3.put("name","光头强");
map3.put("address","森林第三个小屋");
list.add(map1);
list.add(map2);
list.add(map3);
Map<String,String> map = list.stream().collect(Collectors.toMap(each->each.get("id"),each->each.get("name"),(key1,key2)->key1));
System.out.println(JSON.toJSONString(map));

结果:

{“1”:“熊大”,“2”:“熊二”,“3”:“光头强”}

3.List分组

List 转成Map<String,List>

方法一:
List<Person> list = new ArrayList<>();
Person person1 = new Person("熊大","森林第一个小屋");
Person person2 = new Person("熊二","森林第二个小屋");
Person person3 = new Person("光头强","森林第三个小屋");
Person person4 = new Person("熊大","森林第四个小屋");
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
Map<String, List<Person>> map = list.stream().collect(Collectors.groupingBy(Person::getName));
System.out.println(JSON.toJSONString(map));

 控制台打印日志:

{“光头强”:[{“address”:“森林第三个小屋”,“name”:“光头强”}],“熊大”:[{“address”:“森林第一个小屋”,“name”:“熊大”},{“address”:“森林第四个小屋”,“name”:“熊大”}],“熊二”:[{“address”:“森林第二个小屋”,“name”:“熊二”}]}

方法二(不常用):
List<Person> list = new ArrayList<>();
Person person1 = new Person("熊大","森林第一个小屋");
Person person2 = new Person("熊二","森林第二个小屋");
Person person3 = new Person("光头强","森林第三个小屋");
Person person4 = new Person("熊大","森林第四个小屋");
list.add(person1);
list.add(person2);
list.add(person3);
list.add(person4);
Map<String,List<Person>> map =  list.stream().collect(Collectors.toMap(Person::getName,each->Collections.singletonList(each),(value1, value2) -> {List<Person> union = new ArrayList<>(value1);union.addAll(value2);return union;}));
System.out.println(JSON.toJSONString(map));

 结果:

{“光头强”:[{“address”:“森林第三个小屋”,“name”:“光头强”}],“熊大”:[{“address”:“森林第一个小屋”,“name”:“熊大”},{“address”:“森林第四个小屋”,“name”:“熊大”}],“熊二”:[{“address”:“森林第二个小屋”,“name”:“熊二”}]}


http://www.mrgr.cn/news/4580.html

相关文章:

  • 【微服务】SpringCloud 1-9章
  • 46.x86游戏实战-DXX封包实现进入地图房间
  • 迪杰斯特拉(Dijkstra)算法(C/C++)
  • 【JS|第25期】探索HTTP POST请求:请求体的演变与应用
  • 理解安全组与防火墙的关系:云安全的双重保障
  • 企业高性能web服务器【Nginx详解】
  • Redis7基础篇(七)
  • 分享一个基于Spark的招聘数据可视化与分析系统Hadoop大数据源码(源码、调试、LW、开题、PPT)
  • 基于STM32和云平台的花卉养护系统设计(微信小程序)(209)
  • 为什么这么多人选择海运系统?它适用于什么场景?
  • 【解压即玩】PC 侠-盗-猎¥车手 5 中文版+通关存档,超高画质,操作流畅,优化很棒
  • 探索用于多类无监督异常检测的状态空间模型
  • C++位运算
  • Qt消息对话框的实现
  • icon文件解析和生成
  • 基于python的汽车数据分析与可视化---附源码99290
  • 干货实用帖 | PARASOFT与JENKINS 插件集成
  • 如何查找父体共享的评论到底是哪一个子体的——把评论拿走给新品用
  • 省市区三级联动数据+PHP接口
  • 字符串函数———C语言