Remove from ArrayList if one value of objects repeats

Viewed 150

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.

3 Answers

Using streams :

Collection<Person> filterd = persons.stream()
            .collect(Collectors.toMap(
                    Person::getMagicNumber, p -> p, (p1, p2) -> p2))
            .values();
public void addPerson(Person p) {
    list.removeIf(o -> o.magicNumber.equals(p.magicNumber));
    list.add(p);
}
Related