Heim  >  Artikel  >  Java  >  Welche Methoden gibt es, um doppelte Objekte in Java8 zu entfernen?

Welche Methoden gibt es, um doppelte Objekte in Java8 zu entfernen?

WBOY
WBOYnach vorne
2023-05-04 16:10:163882Durchsuche

1. Entfernen Sie doppelte Zeichenfolgen in der Liste.

public List<String> removeStringListDupli(List<String> stringList) {
    Set<String> set = new LinkedHashSet<>();
    set.addAll(stringList);

    stringList.clear();

    stringList.addAll(set);
    return stringList;
}
. Methode des Person-Objekts und hashCode()-Methode:

List<String> unique = list.stream().distinct().collect(Collectors.toList());

Der folgende Objektdeduplizierungscode:

public class Person {
    private Long id;

    private String name;

    public Person(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name=&#39;" + name + &#39;\&#39;&#39; +
                &#39;}&#39;;
    }
}

Die zugrunde liegende Implementierung der contains()-Methode von List verwendet die equal-Methode des zu vergleichenden Objekts Equals () neu zu schreiben, aber Equals neu zu schreiben ist am glücklichsten. Zum Glück wurde auch der HashCode neu geschrieben.

3. Deduplizierung basierend auf den Attributen des Objekts

Als nächstes müssen wir eine Deduplizierung basierend auf der ID des Personenobjekts durchführen.

Schreiben Sie eine Methode:

 @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (!id.equals(person.id)) return false;
        return name.equals(person.name);

    }

    @Override
    public int hashCode() {
        int result = id.hashCode();
        result = 31 * result + name.hashCode();
        return result;
    }

Vergleichen Sie die Objektattribute über den Komparator. Wenn sie gleich sind, wird 0 zurückgegeben, um den Zweck der Filterung zu erreichen.

Werfen wir einen Blick auf die coole Art, Java 8 zu schreiben:

 Person p1 = new Person(1l, "jack");
        Person p2 = new Person(3l, "jack chou");
        Person p3 = new Person(2l, "tom");
        Person p4 = new Person(4l, "hanson");
        Person p5 = new Person(5l, "胶布虫");

        List<Person> persons = Arrays.asList(p1, p2, p3, p4, p5, p5, p1, p2, p2);

        List<Person> personList = new ArrayList<>();
        // 去重
        persons.stream().forEach(
                p -> {
                    if (!personList.contains(p)) {
                        personList.add(p);
                    }
                }
        );
        System.out.println(personList);

Es gibt eine andere Möglichkeit, es zu schreiben:

  public static List<Person> removeDupliById(List<Person> persons) {
        Set<Person> personSet = new TreeSet<>((o1, o2) -> o1.getId().compareTo(o2.getId()));
        personSet.addAll(persons);

        return new ArrayList<>(personSet);
    }

Das obige ist der detaillierte Inhalt vonWelche Methoden gibt es, um doppelte Objekte in Java8 zu entfernen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen