使用stream流转map,遇到相同的key就覆盖值怎么写
时间: 2024-03-14 20:46:40 浏览: 73
可以使用`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了。
JAVA stream流转map
Java中利用Stream流将List类型数据转换成Map类型的几种方法有toMap()、groupingBy()、partitioningBy()等方法。其中,toMap()方法可以将List转换成Map,groupingBy()方法可以将List按照某个属性分组,partitioningBy()方法可以将List按照某个条件分成两组。
以下是几种常见的List转Map的方法:
1. toMap()方法将List转换成Map,其中Lambda表达式中的第一个参数为List中的元素,第二个参数为Map中的key,第三个参数为Map中的value。
```java
List<String> list = Arrays.asList("apple", "banana", "orange");
Map<String, Integer> map = list.stream().collect(Collectors.toMap(Function.identity(), String::length));
System.out.println(map); // 输出:{apple=5, banana=6, orange=6}
```
2. groupingBy()方法将List按照某个属性分组,其中Lambda表达式中的参数为List中的元素,返回值为Map中的key。
```java
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
List<Person> list = Arrays.asList(new Person("Tom", 20), new Person("Jerry", 21), new Person("Lucy", 20));
Map<Integer, List<Person>> map = list.stream().collect(Collectors.groupingBy(Person::getAge));
System.out.println(map); // 输出:{20=[Person{name='Tom', age=20}, Person{name='Lucy', age=20}], 21=[Person{name='Jerry', age=21}]}
```
3. partitioningBy()方法将List按照某个条件分成两组,其中Lambda表达式中的参数为List中的元素,返回值为boolean类型。
```java
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Map<Boolean, List<Integer>> map = list.stream().collect(Collectors.partitioningBy(i -> i % 2 == 0));
System.out.println(map); // 输出:{false=[1, 3, 5], true=[2, 4]}
```
阅读全文