java集合中根据对象属性去重并记录重复的数据的位置
时间: 2024-03-16 14:41:45 浏览: 74
java list根据对象的某个属性的值去重
可以使用Java中的Map和List来实现根据对象属性去重并记录重复数据的位置。
首先,定义一个对象类,假设这个类叫做Person,有一个属性叫做name:
```
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
```
接着,定义一个Map,用来存储去重后的数据和对应的位置:
```
Map<Person, List<Integer>> map = new HashMap<>();
```
然后,遍历原始数据的List,对于每个Person对象,将其作为Map的key进行判断:
```
List<Person> originalList = ... // 原始数据
for (int i = 0; i < originalList.size(); i++) {
Person person = originalList.get(i);
if (map.containsKey(person)) {
// 如果已经存在该对象,则将当前位置添加到对应List中
map.get(person).add(i);
} else {
// 如果不存在该对象,则创建一个新的List,并将当前位置添加到List中
List<Integer> list = new ArrayList<>();
list.add(i);
map.put(person, list);
}
}
```
最终,可以遍历Map,得到去重后的数据和对应的位置:
```
for (Map.Entry<Person, List<Integer>> entry : map.entrySet()) {
Person person = entry.getKey();
List<Integer> positions = entry.getValue();
System.out.println(person.getName() + " 重复位置:" + positions);
}
```
阅读全文