简体   繁体   中英

Remove from ArrayList if one value of objects repeats

How to remove duplicate object from ArrayList, but only if one specific value from object repeats with another object?

For example: I have class named Person with fields:

private String city;
private String firstName;
private String lastName;
private Long magicNumber;

I want to remove "older" Person with same "magicNumber" as the new One and keep him in ArrayList.

Using streams :

Collection<Person> filterd = persons.stream()
            .collect(Collectors.toMap(
                    Person::getMagicNumber, p -> p, (p1, p2) -> p2))
            .values();

Well, assuming you have overriden public boolean equals(Object object) in your class in order to compare your magicNumber field:

https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)

List<Person> persons = new ArrayList<>();
public void addToList(Person person) {
     if(persons.contains(person)) {
         persons.set(persons.indexOf(person), person);
     } else {
         persons.add(person);
     }

}
public void addPerson(Person p) {
    list.removeIf(o -> o.magicNumber.equals(p.magicNumber));
    list.add(p);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM