Javalist中的对象某个属性存在重复时将重复的对象去重
时间: 2023-02-16 15:42:45 浏览: 71
可以使用Java中的HashSet集合来实现。HashSet集合本质上是一个HashMap,它可以自动去除重复的元素。可以使用类似如下的代码来实现:
```
List<Object> list = ...;
Set<Object> set = new HashSet<>(list);
List<Object> uniqueList = new ArrayList<>(set);
```
这样就可以得到一个去重后的List对象。
需要注意的是,如果需要判重的属性是可变的,那么HashSet会将每个值都看作一个不同的元素。此时需要重写对象的hashCode和equals方法,让它们根据需要判重的属性来判断对象是否相等。
相关问题
Java中的list根据对象的某个属性的值去重 详细代码
你可以使用Java中的`HashSet`来实现List根据对象的某个属性值去重。下面是一个示例代码:
```java
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getters and setters
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return name.hashCode() + age;
}
}
public class Main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("John", 25));
personList.add(new Person("John", 25));
personList.add(new Person("Alice", 30));
personList.add(new Person("Bob", 35));
personList.add(new Person("Alice", 30));
Set<Person> uniquePersons = new HashSet<>(personList);
List<Person> distinctPersonList = new ArrayList<>(uniquePersons);
for (Person person : distinctPersonList) {
System.out.println(person.getName() + " - " + person.getAge());
}
}
}
```
在上面的代码中,我们定义了一个`Person`类,它有一个属性`name`和一个属性`age`。重写了`equals()`和`hashCode()`方法,使得两个`Person`对象根据`name`和`age`判断是否相等。
在`main()`方法中,我们创建了一个包含重复元素的`personList`列表。然后,我们使用`HashSet`来去除重复元素,因为`HashSet`不允许重复元素。最后,我们将去重后的元素存放到`distinctPersonList`列表中,并输出每个人的姓名和年龄。
运行上述代码,输出结果将为:
```
Alice - 30
Bob - 35
John - 25
```
这样就实现了根据对象的某个属性值去重的功能。
list集合根据某个对象的属性去重
要根据某个对象的属性去重list集合,可以按照以下步骤进行操作。
首先,我们需要自定义一个比较器(Comparator)来比较两个对象的属性是否相等。比较器的作用是根据对象的属性值确定两个对象是否相等。
其次,我们可以利用Java 8的流操作,使用distinct()方法来去除集合中的重复元素。在这个方法中,我们可以使用自定义的比较器来比较两个对象。
最后,我们将得到去重后的list集合。
下面是一个例子,假设我们有一个Person对象的list集合,每个Person对象都有一个name属性。
```
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Person [name=" + name + "]";
}
}
public class Main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("John"));
personList.add(new Person("Jane"));
personList.add(new Person("John")); // 添加重复元素
List<Person> distinctList = personList.stream().distinct(new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName()); // 比较name属性
}
}).toList();
System.out.println(distinctList);
}
}
```
运行这段代码,我们将得到去重后的list集合:[Person [name=Jane], Person [name=John]]。