list 转map java8
时间: 2023-05-03 21:06:15 浏览: 112
在Java 8中,可以很方便地将List转换为Map。List转Map的本质是将List中的元素提取出来,并将它们映射到一个特定的key-value对中。以下是Java 8中将List转换为Map的实现方式:
1. 通过流stream调用collect(Collectors.toMap(keyMapper, valueMapper))的方式实现,其中keyMapper和valueMapper分别是一个Function<T, K>函数,它们将对应参数T类型的元素的属性映射到K类型的键和V类型的值中。
例如,假设有一个Student实体类,包含属性name和id,需要将一个包含多个Student对象的List转换为以id为键、以Student对象为值的Map。则代码如下:
List<Student> studentList = new ArrayList<>();
// 添加多个对象到List中
Map<Integer, Student> map = studentList.stream()
.collect(Collectors.toMap(Student::getId, Function.identity()));
其中,Student::getId表示使用Student类的getId属性作为Map的键,Function.identity()即表示使用原始对象作为Map的值。
2. 如果List中的元素属性键有重复,可以提供一个BinaryOperator合并函数来处理冲突。代码如下:
List<Student> studentList = new ArrayList<>();
// 添加多个对象到List中
Map<Integer, Student> map = studentList.stream()
.collect(Collectors.toMap(Student::getId, Function.identity(), (existing, replacement) -> existing));
其中,存储的键是Student的id属性,存储的值是Student对象本身。如果存在重复id,则使用BinaryOperator合并函数选择较早出现的Student对象。
总之,在Java 8中,可以非常方便地将List转换为Map,而且代码简洁、易于理解。
阅读全文