java8中如何将对象转换为map呢?

戚薇 Java经验 发布时间:2023-04-15 22:00:08 阅读数:2234 1
下文笔者讲述将对象转换为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;
   }
));
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202304/16815672516253.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者