使用stream流转map,遇到相同的key就覆盖值怎么写
时间: 2024-03-14 09:46:40 浏览: 18
可以使用`Collectors.toMap`方法来实现流转Map并覆盖相同的key的值。具体实现可以参考以下代码示例:
```
List<String> list = Arrays.asList("apple", "banana", "cherry", "apple", "cherry");
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(Function.identity(), v -> 1, Integer::sum));
System.out.println(map);
```
这段代码的作用是将列表中的字符串转成Map,相同的字符串作为key,出现的次数作为value,如果有重复的key,则将值相加。输出结果为:
```
{banana=1, cherry=2, apple=2}
```
这里使用了`Collectors.toMap`方法的重载版本,第一个参数是key的映射函数,第二个参数是value的映射函数,将value设置为1,表示每个key的初始值为1,第三个参数是合并函数,将相同的key的value相加。
相关问题
stream流转map
list通过stream转换成map的方法如下:
1. 首先,使用stream()方法将list转换为一个流。
2. 然后,使用collect()方法将流转换为一个map。在collect()方法中,使用Collectors.toMap()方法将流中的元素转换为map中的键值对。
例如,假设有一个List<Person>,其中Person类有两个属性:name和age。现在要将这个List转换为一个Map<String, Integer>,其中键是Person的name属性,值是Person的age属性。可以使用以下代码:
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge));
其中,Person::getName和Person::getAge是方法引用,用于获取Person对象的name和age属性。这样,就可以将List转换为Map了。
取List<Map>中具体key的所有值 使用stream
使用Java 8中的Stream API,可以更简洁地实现遍历List中每一个Map,获取指定key的值,并将其存储到新的List中的操作。示例代码如下:
```java
public List<Object> getListOfValuesByKey(List<Map<String, Object>> list, String key) {
return list.stream()
.map(map -> map.get(key))
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
```
其中,`list`为包含多个`Map`的列表,`key`为要获取值的`Map`中的键名,返回的`List`为所有值的列表。使用`stream()`将`List`转换成流,然后使用`map()`对每一个`Map`获取指定key的值,使用`filter()`过滤掉值为`null`的元素,最后使用`collect()`将流转换成列表并返回。