stream流list转map
时间: 2023-09-29 14:03:34 浏览: 39
可以使用Java 8的Stream API来将List转换成Map。假设我们有一个List,其中每个元素都是一个Person对象,其中Person对象有一个唯一的ID和一个名称属性。我们可以通过以下代码将该List转换为Map,其中ID作为键,Person对象作为值:
```
List<Person> personList = ... // 假设这里有一个Person对象的列表
Map<Integer, Person> personMap = personList.stream()
.collect(Collectors.toMap(Person::getId, Function.identity()));
```
其中,Person::getId是一个方法引用,它将Person对象的getID()方法作为键提取函数。Function.identity()是一个静态方法引用,它返回一个函数,该函数返回其输入参数。在这里,它被用作值提取函数,因为我们希望将整个Person对象用作Map的值。
需要注意的是,如果List中有重复的键值,则会抛出IllegalStateException异常。如果需要处理重复的键值,可以使用toMap()方法的第三个参数来指定一个合并函数来处理冲突。例如,以下代码将List转换为Map,如果有重复的键值,则将Person对象的名称属性合并为一个逗号分隔的字符串:
```
Map<Integer, String> personMap = personList.stream()
.collect(Collectors.toMap(Person::getId, Person::getName, (name1, name2) -> name1 + ", " + name2));
```