java Collectors.toMap 怎么用
时间: 2023-11-08 18:59:59 浏览: 107
可以使用Collectors.toMap()方法来实现根据某一属性去重。具体用法如下:
```
List<UserInfo> list = userInfoMapper.getList();
Map<String, UserInfo> collect = list.stream()
.collect(Collectors.toMap(UserInfo::getName, Function.identity(), (v1, v2) -> v1));
list = new ArrayList<>(collect.values());
```
上述代码中,首先通过stream()方法将List转换为流,然后使用Collectors.toMap()方法来将流中的元素按照指定属性(这里是姓名)作为键,以元素本身作为值进行收集。当遇到重复的键时,使用第三个参数指定的函数来解决冲突(这里是保留第一个出现的元素)。最后将去重后的结果转换为ArrayList。
相关问题
java Collectors.toMap
Java中的Collectors.toMap是一个用于将流中的元素转换为Map的方法。它接受三个参数:一个用于指定Map的键的函数、一个用于指定Map的值的函数和一个用于处理重复键的函数。如果不指定处理重复键的函数,当出现重复键时,会抛出Duplicate key异常。可以使用mergeFunction参数来指定如何处理重复键。如果mergeFunction返回null,则会删除重复键。如果mergeFunction返回非null值,则会将新值与旧值合并。
在引用中,有三个例子展示了如何使用Collectors.toMap方法将List转换为Map。第一个例子将PersonDto对象列表转换为以id为键,以PersonDto对象为值的Map。第二个例子将PersonDto对象列表转换为以id为键,以name为值的Map。第三个例子展示了如何使用Collectors.toMap方法去重,其中根据姓名去重。如果出现重复键,则使用mergeFunction参数指定的函数进行处理。
java Collectors.toMap()
Collectors.toMap()是Java 8中的一个方法,用于将流中的元素转化为一个Map。它接受三个参数:
- keyMapper:用于生成Map中的键的函数。
- valueMapper:用于生成Map中的值的函数。
- mergeFunction:在两个相同键的元素冲突时,用于解决冲突的函数。
根据你提供的引用,以下是Collectors.toMap()方法的几个用法:
1. 将List转换为Map,其中id作为键,name作为值。如果遇到重复的id,只保留第一个name。
```java
Map<Long, String> collect = objects.stream().collect(Collectors.toMap(PersonDto::getId, PersonDto::getUserName, (o1, o2) -> o1));
System.out.println("collect = " + collect);
```
2. 将List转换为Map,其中id作为键,元素对象作为值。如果遇到重复的id,将会抛出一个IllegalStateException异常。
```java
Map<Long, PersonDto> collect1 = objects.stream().collect(Collectors.toMap(PersonDto::getId, o -> o));
System.out.println("collect1 = " + collect1);
```
阅读全文