Heim > Java > javaLernprogramm > Hauptteil

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

WBOY
Freigeben: 2023-05-04 16:10:16
nach vorne
3875 Leute haben es durchsucht

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;
}
Nach dem Login kopieren
. Methode des Person-Objekts und hashCode()-Methode:

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

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;;
    }
}
Nach dem Login kopieren

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;
    }
Nach dem Login kopieren

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);
Nach dem Login kopieren

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);
    }
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage