public static <T, K, U> Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction) { return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new); } 这段代码除了去重还能做什么,写几个例子
时间: 2024-03-22 12:39:16 浏览: 58
TreeMap<K,V>类以及LinkedList<E>
除了去重之外,这段代码还可以将一个 List 转换成一个 Map。下面是一些使用 `toMap` 方法的例子:
1. 将 List 转换成 Map
```
List<Person> personList = Arrays.asList(new Person("Tom", 22), new Person("Jerry", 25), new Person("Lucy", 22));
Map<String, Integer> personMap = personList.stream().collect(Collectors.toMap(Person::getName, Person::getAge));
```
这段代码将一个存储着 Person 对象的 List 转换成一个以 Person 的 name 作为 key,age 作为 value 的 Map。
2. 将 List 转换成 Map,并对 value 进行合并
```
List<Person> personList = Arrays.asList(new Person("Tom", 22), new Person("Jerry", 25), new Person("Lucy", 22));
Map<String, Integer> personMap = personList.stream().collect(Collectors.toMap(Person::getName, Person::getAge, (v1, v2) -> v1 + v2));
```
这段代码将一个存储着 Person 对象的 List 转换成一个以 Person 的 name 作为 key,age 作为 value 的 Map,并且如果出现 key 冲突时将两个 value 值相加。
3. 将 List 转换成 TreeMap
```
List<Person> personList = Arrays.asList(new Person("Tom", 22), new Person("Jerry", 25), new Person("Lucy", 22));
Map<String, Integer> personMap = personList.stream().collect(Collectors.toMap(Person::getName, Person::getAge, (v1, v2) -> v1 + v2, TreeMap::new));
```
这段代码将一个存储着 Person 对象的 List 转换成一个以 Person 的 name 作为 key,age 作为 value 的 TreeMap。注意,此时需要提供一个 TreeMap 的构造方法作为第四个参数。
需要注意的是,使用 `toMap` 方法时需要确保 key 的唯一性,否则会抛出 IllegalStateException 异常。
阅读全文