实体类集合转Map
实体类
@Data
@AllArgsConstructor
public class Teacher{
private String no;
private String name;
}
构造数据
List<Teacher> list = new ArrayList();
list.add(new Teacher("1001", "小A"));
list.add(new Teacher("1001", "小B"));
list.add(new Teacher("1002", "小C"));
list.add(new Teacher("1003", "小D"));
不判断key重复
Map<String, Teacher> map1 =
list.stream().collect(Collectors.toMap(
Teacher::getNo,
Function.identity()
));
返回对象
Map<String, Teacher> map2 =
list.stream().collect(Collectors.toMap(
Teacher::getNo,
obj -> obj,
(key1, key2) -> key1
));
Map<String, Teacher> map3 =
list.stream().collect(Collectors.toMap(
Teacher::getNo,
Function.identity(),
(key1, key2) -> key1
));
返回属性
Map<String, String> map4 =
list.stream().collect(Collectors.toMap(
Teacher::getNo,
Teacher::getName,
(key1, key2) -> key1
));
按照某个属性分组
Map<String, List<Teacher>> map5 =
list.stream().collect(Collectors.groupingBy(Teacher::getNo));
按照多个属性分组
Map<String, List<Teacher>> map6 =
list.stream().collect(Collectors.groupingBy(obj -> obj.getNo() + "_" + obj.getName()));
Map集合转Map
构造数据
List<Map<String, Object>> list = new ArrayList();
Map<String, Object> data1 = new HashMap<>();
data1.put("no", "1001");
data1.put("name", "小A");
Map<String, Object> data2 = new HashMap<>();
data2.put("no", "1001");
data2.put("name", "小B");
Map<String, Object> data3 = new HashMap<>();
data3.put("no", "1002");
data3.put("name", "小C");
Map<String, Object> data4 = new HashMap<>();
data4.put("no", "1003");
data4.put("name", "小D");
list.add(data1);
list.add(data2);
list.add(data3);
list.add(data4);
映射
Map<String, Map<String, Object>> map1 = list.stream().collect(Collectors.toMap(s -> s.get("no") + "", s -> s, (key1, key2) -> key1));
分组
Map<String, List<Map<String, Object>>> map2 = list.stream().collect(Collectors.groupingBy(s -> s.get("no") + ""));
System.out.println(map1);