java8中如何将对象转换为map呢?
下文笔者讲述将对象转换为map的方法及转换时出现Duplicate key 的异常处理,如下所示
对象转map的实现思路
使用list stream中的 Collectors.toMap方法即可将list转换为map例:
@Getter @Setter @AllArgsConstructor public class Student{ private String className; private String studentName; public static void main(String[] args) { List<Student> list = new ArrayList<>(); list.add(new Student("class1", "小明")); list.add(new Student("class2", "小芳")); list.add(new Student("class2", "小华")); list.add(new Student("class3", "翠花")); list.add(new Student("class3", "香兰")); // 集合中对象属性转map Map<String, String> map = list.stream().collect(Collectors.toMap(Student :: getClassName, Student :: getStudentName)); System.out.println(map); } } //使用以上方法,可将List转map //但是出现重复key异常
重复key解决方法
Collectors.toMap(keyMapper, valueMapper, mergeFunction) mergeFunction: 此函数是一个合并函数,当遇到重复key时,将会采用此函数进行合并处理例:list转map重复键的处理示例
1、重复时采用后面的value 覆盖前面的value Map<String, String> map = list.stream() .collect(Collectors.toMap(Student :: getClassName, Student :: getStudentName, (value1, value2 )->{ return value2; })); //简写 Map<String, String> map = list.stream() .collect(Collectors.toMap(Student :: getClassName, Student :: getStudentName, (key1 , key2)-> key2 )); //2、重复时将之前的value 和现在的value拼接或相加起来; Map<String, String> map = list.stream() .collect(Collectors.toMap(Student :: getClassName, Student :: getStudentName, (key1 , key2)-> key1 + "," + key2 )); //3、将重复key的数据变成一个集合! Map<String, List<String>> map = list.stream().collect(Collectors.toMap(Student :: getClassName, // 此时的value 为集合,方便重复时操作 s -> { List<String> studentNameList = new ArrayList<>(); studentNameList.add(s.getStudentName()); return studentNameList; }, // 重复时将现在的值全部加入到之前的值内 (List<String> value1, List<String> value2) -> { value1.addAll(value2); return value1; } ));
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。