小木的学习笔记
package com.ly.entity; import lombok.Data; /** * 学生实体类 * @author liaoyu */ @Data public class Student { /** * 姓名 */ private String name; /** * 性别 */ private String sex; /** * 成绩 */ private Float grade; public Student(String name, String sex, Float grade) { this.name = name; this.sex = sex; this.grade = grade; } }初始化测试数据
List<Student> studentList = new ArrayList<>(); studentList.add(new Student("张三", "男", 87.0F)); studentList.add(new Student("李四", "男", 100.0F)); studentList.add(new Student("王五", "女", 91.0F)); studentList.add(new Student("赵六", "男", 60.0F)); List<Map<String, Object>> studentMapList = new ArrayList<>(); Map<String, Object> studentMap = new HashMap<>(); studentMap.put("name", "张三"); studentMap.put("sex", "男"); studentMap.put("grade", 87.0F); studentMapList.add(studentMap); studentMap.put("name", "李四"); studentMap.put("sex", "男"); studentMap.put("grade", 100.0F); studentMapList.add(studentMap); studentMap.put("name", "王五"); studentMap.put("sex", "女"); studentMap.put("grade", 91.0F); studentMapList.add(studentMap);1、某个字段为key,某个字段为value
// 以学生成绩为例:以学生名称为key,成绩为value // List<Entity>样例 Map<String, Float> collect1 = studentList.stream().collect(Collectors.toMap(Student::getName, Student::getGrade)); // 现有的数据,按以上的方式运行不会报错,但是如果集合对象有重复的key,会报错Duplicate key .... 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2 studentList.add(new Student("赵六", "女", 94.0F)); // 以下两种方式都可以,下面第二种方式是针对第一种的简写 Map<String, Float> collect2 = studentList.stream().collect(Collectors.toMap(student -> student.getName(), student -> student.getGrade(), (k1, k2) -> k1)); Map<String, Float> collect3 = studentList.stream().collect(Collectors.toMap(Student::getName, Student::getGrade, (k1, k2) -> k1)); // List<Map>样例 Map<String, Float> collect4 = studentMapList.stream().collect(Collectors.toMap(s -> MapUtil.getStr(s, "name"), s -> MapUtil.getFloat(s, "grade"), (k1, k2) -> k1));
// 以学生成绩为例:以学生名称为key,成绩为value // List<Entity>样例 Map<String, Student> collect5 = studentList.stream().collect(Collectors.toMap(Student::getName, t -> t, (k1, k2) -> k1)); // List<Map>样例 Map<String, Map<String, Object>> collect6 = studentMapList.stream().collect(Collectors.toMap(s -> MapUtil.getStr(s, "name"), t -> t, (k1, k2) -> k1));
// 以学生成绩为例:以学生名称_性别为key,成绩为value // List<Entity>样例 Map<String, Student> collect7 = studentList.stream().collect(Collectors.toMap(student -> student.getName() + "_" + student.getSex(), t -> t, (k1, k2) -> k1)); // List<Map>样例 Map<String, Map<String, Object>> collect8 = studentMapList.stream().collect(Collectors.toMap(s -> MapUtil.getStr(s, "name") + "_" + MapUtil.getStr(s, "sex"), t -> t, (k1, k2) -> k1));4、获取一个字段的集合,得到List<Object>
// 获取所有学生姓名集合 // List<Entity>样例 List<String> studentNameList = studentList.stream().map(Student::getName).collect(Collectors.toList()); List<String> studentNameList2 = studentList.stream().map(p -> p.getName()).collect(Collectors.toList()); // List<Map>样例 List<String> studentNameList3 = studentMapList.stream().map(p -> MapUtil.getStr(p, "name")).collect(Collectors.toList());
标签: java8 List转Map 拼接多个参数组成Key java8 java8 List转Map java8 List转Map多个参数组成Key