Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Eliminando Duplicatas com o Método distinct() | Operações Intermediárias na Stream API
Stream API

bookEliminando Duplicatas com o Método distinct()

No desenvolvimento do mundo real, frequentemente surgem situações em que os dados contêm duplicatas que precisam ser removidas. Por exemplo, imagine a compilação de uma lista de participantes de uma conferência, mas devido a erros do sistema, alguns nomes foram registrados duas vezes.

O método distinct() auxilia na resolução desse problema ao eliminar elementos duplicados de um stream.

Stream<T> distinct()

Este método retorna um stream contendo apenas elementos únicos, filtrando quaisquer duplicatas.

Como Funciona

O método distinct() depende de hashCode() para detectar rapidamente possíveis duplicatas e de equals() para confirmar se são realmente idênticos. Se dois objetos possuem hash codes diferentes, são considerados únicos. Se os hash codes coincidirem, equals() é chamado para verificar a igualdade com base em critérios específicos.

Juntos, esses métodos formam o contrato de hashCode() e equals() contrato, garantindo a comparação adequada e a remoção de duplicatas.

Em vez de escrevê-los manualmente, o IntelliJ IDEA permite gerá-los automaticamente.

No IntelliJ IDEA, o menu de geração de código foi aberto (Alt + Insert no Windows/Linux, Cmd + N no Mac) e selecionado equals() e hashCode(). Após escolher os campos a serem incluídos na comparação, o IDEA gerou automaticamente os métodos necessários.

Exemplo Prático

Uma fábrica registra as peças produzidas, mas o relatório contém duplicatas e também peças defeituosas identificadas como DEFECT. O objetivo é limpar a lista, mantendo apenas as peças únicas e não defeituosas, ordená-las por nome e exibi-las no formato: Name - Serial Number.

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
package com.example; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Part> parts = List.of( new Part("SN001", "Gear"), new Part("SN002", "Bolt"), new Part("SN003", "Nut"), new Part("SN001", "Gear"), new Part("SN004", "DEFECT Shaft"), new Part("SN005", "Screw"), new Part("SN002", "Bolt"), new Part("SN006", "DEFECT Washer") ); List<String> processedParts = parts.stream() .distinct() .filter(part -> !part.getName().contains("DEFECT")) .sorted((p1, p2) -> p1.getName().compareToIgnoreCase(p2.getName())) .map(part -> part.getName() + " - " + part.getSerialNumber()) .toList(); System.out.println(processedParts); } } class Part { private String serialNumber; private String name; public Part(String serialNumber, String name) { this.serialNumber = serialNumber; this.name = name; } public String getSerialNumber() { return serialNumber; } public String getName() { return name; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Part)) return false; Part part = (Part) o; return serialNumber.equals(part.serialNumber); } @Override public int hashCode() { return serialNumber.hashCode(); } @Override public String toString() { return name + " - " + serialNumber; } }

Para remover duplicatas e filtrar as peças defeituosas, os métodos equals() e hashCode() devem ser implementados corretamente para comparar as peças pelo número de série.

Após isso, utiliza-se distinct() para eliminar as duplicatas, filter() para remover as peças defeituosas que contenham DEFECT no nome, sorted() para ordenar as peças restantes e map() para formatá-las como strings.

1. O que é utilizado para comparar elementos no método distinct()?

2. Se dois objetos possuem o mesmo hashCode(), mas o método equals() retorna falso, eles serão considerados iguais no método distinct()?

question mark

O que é utilizado para comparar elementos no método distinct()?

Select the correct answer

question mark

Se dois objetos possuem o mesmo hashCode(), mas o método equals() retorna falso, eles serão considerados iguais no método distinct()?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 7

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you show me a code example of how to use distinct() in this scenario?

How do I implement equals() and hashCode() for my Part class?

What does the full stream pipeline look like for this example?

Awesome!

Completion rate improved to 2.33

bookEliminando Duplicatas com o Método distinct()

Deslize para mostrar o menu

No desenvolvimento do mundo real, frequentemente surgem situações em que os dados contêm duplicatas que precisam ser removidas. Por exemplo, imagine a compilação de uma lista de participantes de uma conferência, mas devido a erros do sistema, alguns nomes foram registrados duas vezes.

O método distinct() auxilia na resolução desse problema ao eliminar elementos duplicados de um stream.

Stream<T> distinct()

Este método retorna um stream contendo apenas elementos únicos, filtrando quaisquer duplicatas.

Como Funciona

O método distinct() depende de hashCode() para detectar rapidamente possíveis duplicatas e de equals() para confirmar se são realmente idênticos. Se dois objetos possuem hash codes diferentes, são considerados únicos. Se os hash codes coincidirem, equals() é chamado para verificar a igualdade com base em critérios específicos.

Juntos, esses métodos formam o contrato de hashCode() e equals() contrato, garantindo a comparação adequada e a remoção de duplicatas.

Em vez de escrevê-los manualmente, o IntelliJ IDEA permite gerá-los automaticamente.

No IntelliJ IDEA, o menu de geração de código foi aberto (Alt + Insert no Windows/Linux, Cmd + N no Mac) e selecionado equals() e hashCode(). Após escolher os campos a serem incluídos na comparação, o IDEA gerou automaticamente os métodos necessários.

Exemplo Prático

Uma fábrica registra as peças produzidas, mas o relatório contém duplicatas e também peças defeituosas identificadas como DEFECT. O objetivo é limpar a lista, mantendo apenas as peças únicas e não defeituosas, ordená-las por nome e exibi-las no formato: Name - Serial Number.

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
package com.example; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Part> parts = List.of( new Part("SN001", "Gear"), new Part("SN002", "Bolt"), new Part("SN003", "Nut"), new Part("SN001", "Gear"), new Part("SN004", "DEFECT Shaft"), new Part("SN005", "Screw"), new Part("SN002", "Bolt"), new Part("SN006", "DEFECT Washer") ); List<String> processedParts = parts.stream() .distinct() .filter(part -> !part.getName().contains("DEFECT")) .sorted((p1, p2) -> p1.getName().compareToIgnoreCase(p2.getName())) .map(part -> part.getName() + " - " + part.getSerialNumber()) .toList(); System.out.println(processedParts); } } class Part { private String serialNumber; private String name; public Part(String serialNumber, String name) { this.serialNumber = serialNumber; this.name = name; } public String getSerialNumber() { return serialNumber; } public String getName() { return name; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Part)) return false; Part part = (Part) o; return serialNumber.equals(part.serialNumber); } @Override public int hashCode() { return serialNumber.hashCode(); } @Override public String toString() { return name + " - " + serialNumber; } }

Para remover duplicatas e filtrar as peças defeituosas, os métodos equals() e hashCode() devem ser implementados corretamente para comparar as peças pelo número de série.

Após isso, utiliza-se distinct() para eliminar as duplicatas, filter() para remover as peças defeituosas que contenham DEFECT no nome, sorted() para ordenar as peças restantes e map() para formatá-las como strings.

1. O que é utilizado para comparar elementos no método distinct()?

2. Se dois objetos possuem o mesmo hashCode(), mas o método equals() retorna falso, eles serão considerados iguais no método distinct()?

question mark

O que é utilizado para comparar elementos no método distinct()?

Select the correct answer

question mark

Se dois objetos possuem o mesmo hashCode(), mas o método equals() retorna falso, eles serão considerados iguais no método distinct()?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 7
some-alt