Map<Integer, Person> personMap = personList.stream().collect(Collectors.toMap(Person::getId, Function.identity())); 去重
时间: 2024-02-06 14:09:18 浏览: 71
如果你想根据 Person 对象的 id 字段进行去重,可以在 toMap 方法中增加一个 mergeFunction 参数,用于合并重复键的值。例如:
```
Map<Integer, Person> personMap = personList.stream()
.collect(Collectors.toMap(Person::getId, Function.identity(), (p1, p2) -> p1));
```
上面的代码中,当出现重复的键(即两个 Person 对象的 id 相同时),我们选择保留第一个对象的值,即 p1。如果你想保留最后一个对象的值,可以修改为 `(p1, p2) -> p2`。
相关问题
stream().collect(Collectors.toMap
`stream().collect(Collectors.toMap())`是Java 8中的一个方法,它可以将一个流转换为一个Map对象。该方法需要两个参数:一个是用于生成Map键的函数,另一个是用于生成Map值的函数。下面是一个例子:
假设我们有一个Person类,其中包含id和name两个属性。我们想将一个Person列表转换为一个Map,其中id是键,name是值。可以使用以下代码:
```java
List<Person> personList = new ArrayList<>();
personList.add(new Person(1, "Alice"));
personList.add(new Person(2, "Bob"));
personList.add(new Person(3, "Charlie"));
Map<Integer, String> personMap = personList.stream()
.collect(Collectors.toMap(Person::getId, Person::getName));
System.out.println(personMap);
```
输出结果为:`{1=Alice, 2=Bob, 3=Charlie}`
在上面的代码中,`Person::getId`和`Person::getName`是方法引用,用于生成Map的键和值。`toMap()`方法将这些键值对收集到一个Map中。
List<RmPerson>转化成List<Map>
可以使用Java 8的Stream API来实现List<RmPerson>转化成List<Map>的操作,具体代码如下:
```
List<RmPerson> personList = new ArrayList<>();
// 假设已经将personList中的数据填充好了
List<Map<String, Object>> mapList = personList.stream().map(person -> {
Map<String, Object> map = new HashMap<>();
map.put("id", person.getId());
map.put("name", person.getName());
map.put("age", person.getAge());
// 将其他属性也放到map中
return map;
}).collect(Collectors.toList());
```
这段代码中,首先使用stream()方法将List<RmPerson>转化成一个Stream对象,然后使用map()方法将每个RmPerson对象转化成一个Map<String, Object>对象。具体实现中,我们使用了一个Lambda表达式,将每个RmPerson对象转化成对应的Map对象,并且将Map对象的键值对按照需要的形式填充好。最后使用collect()方法将所有的Map对象收集起来,转化成一个List<Map<String, Object>>对象。
阅读全文