stream流list 转map
时间: 2023-11-04 10:00:38 浏览: 99
stream流可以通过collect(Collectors.toMap())方法将List转换为Map。在这个方法中,我们可以指定将List中的某个属性作为key,将List中的元素作为value。具体的实现如下所示:
```
Map<String, ProductDto> map = dtoList.stream()
.collect(Collectors.toMap(ProductDto::getProperty, Function.identity()));
```
这里的ProductDto表示List中的元素类型,getProperty表示要作为key的属性。通过这个方法,我们可以将List转换为一个以属性为key,元素为value的Map。
相关问题
stream流list转map
可以使用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));
```
stream 流 list 转map
Java Stream可以通过collect方法将List转换为Map。
示例代码如下:
```
List<Person> personList = Arrays.asList(
new Person("Tom", 20),
new Person("Jerry", 25),
new Person("Alice", 30)
);
Map<String, Integer> personMap = personList.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge));
System.out.println(personMap);
```
其中,Person是一个自定义的类,包含name和age两个属性。通过stream的collect方法,使用Collectors.toMap方法将List转换为Map,其中Person::getName和Person::getAge分别是获取name和age属性的方法引用。
输出结果为:
```
{Tom=20, Jerry=25, Alice=30}
```
即将List中的每个Person对象转换为Map中的一个键值对,键为name属性,值为age属性。
阅读全文