Dado un flujo que contiene algunos elementos, la tarea es encontrar los elementos duplicados en este flujo en Java .
Ejemplos:
Entrada: Corriente = {5, 13, 4, 21, 13, 27, 2, 59, 59, 34}
Salida: [59, 13]
Explicación:
Los únicos elementos duplicados en la corriente dada son 59 y 13.Entrada: Flujo = {5, 13, 4, 21, 27, 2, 59, 34}
Salida: []
Explicación:
No hay elementos duplicados en el flujo dado, por lo que la salida está vacía.
Hay muchos métodos para encontrar elementos duplicados en un Stream :
- Usando Set : Dado que Set tiene la propiedad de que no puede contener ningún elemento duplicado. Entonces, si agregamos los elementos en un Conjunto, automáticamente descarta los elementos duplicados mientras se agrega.
Acercarse:
- Obtenga el flujo de elementos en los que se encuentran los duplicados.
- Atraviesa cada elemento de la corriente
- Para cada elemento de la secuencia, si no está presente en el conjunto, agréguelo. Esto se puede hacer usando el método Set.add() .
Set.add()
- Si el elemento ya está presente en el Conjunto, entonces este Set.add() devuelve falso.
- Por lo tanto, podemos imprimir dichos elementos o recopilarlos para su posterior proceso. Imprimiremos estos elementos en este caso.
A continuación se muestra la implementación del enfoque anterior:
Ejemplo:
// Java program to find the duplicate
// elements in a Stream using Set
import
java.util.*;
import
java.util.stream.*;
public
class
GfG {
// Function to find the
// duplicates in a Stream
public
static
<T> Set<T>
findDuplicateInStream(Stream<T> stream)
{
// Set to store the duplicate elements
Set<T> items =
new
HashSet<>();
// Return the set of duplicate elements
return
stream
// Set.add() returns false
// if the element was
// already present in the set.
// Hence filter such elements
.filter(n -> !items.add(n))
// Collect duplicate elements
// in the set
.collect(Collectors.toSet());
}
// Driver code
public
static
void
main(String[] args)
{
// Initial stream
Stream<Integer> stream
= Stream.of(
5
,
13
,
4
,
21
,
13
,
27
,
2
,
59
,
59
,
34
);
// Print the found duplicate elements
System.out.println(
findDuplicateInStream(stream));
}
}
Producción:[59, 13]
- Usando Collectors.groupingBy() : El método groupingBy() de la clase Collectors en Java agrupa los objetos por alguna propiedad. Así que pasaremos la propiedad de redundancia y recogeremos el resultado en un Conjunto.
Acercarse:
- Obtenga el flujo de elementos en los que se encuentran los duplicados.
- Atraviesa cada elemento de la corriente
- Para cada elemento de la transmisión, agrúpelos junto con su frecuencia en un mapa, usando el método Collectors.groupingBy() .
stream.collect( Collectors.groupingBy(Function.identity(), Collectors.counting()));
- Luego, para cada elemento en el mapa recopilado, si la frecuencia de cualquier elemento es más de uno, entonces este elemento es un elemento duplicado.
- Por lo tanto, podemos imprimir dichos elementos o recopilarlos para su posterior proceso. Imprimiremos estos elementos en este caso.
A continuación se muestra la implementación del enfoque anterior:
Ejemplo:
// Java program to find the duplicate
// elements in a Stream using Collectors.groupingBy()
import
java.util.*;
import
java.util.stream.*;
import
java.util.function.Function;
public
class
GfG {
// Function to find the
// duplicates in a Stream
public
static
<T> Set<T>
findDuplicateInStream(Stream<T> stream)
{
// Return the set of duplicate elements
return
stream
// Group the elements along
// with their frequency in a map
.collect(
Collectors.groupingBy(
Function.identity(),
Collectors.counting()))
// Convert this map into a stream
.entrySet()
.stream()
// Check if frequency > 1
// for duplicate elements
.filter(m -> m.getValue() >
1
)
// Find such elements
.map(Map.Entry::getKey)
// And Collect them in a Set
.collect(Collectors.toSet());
}
// Driver code
public
static
void
main(String[] args)
{
// Initial stream
Stream<Integer> stream
= Stream.of(
5
,
13
,
4
,
21
,
13
,
27
,
2
,
59
,
59
,
34
);
// Print the found duplicate elements
System.out.println(
findDuplicateInStream(stream));
}
}
Producción:[59, 13]
- Usando Collections.frequency() : El método de frecuencia() de la clase Collections en Java, cuenta la frecuencia del elemento especificado en la lista dada. Entonces encontraremos los elementos que tienen una frecuencia mayor a 1, que son los elementos duplicados.
Acercarse:
- Obtenga el flujo de elementos en los que se encuentran los duplicados.
- Atraviesa cada elemento de la corriente
- Para cada elemento en la transmisión, cuente la frecuencia de cada elemento, usando el método Collections.frequency() .
Collections.frequency(list, i)
- Luego, para cada elemento en la lista de colección, si la frecuencia de cualquier elemento es más de uno, entonces este elemento es un elemento duplicado.
- Por lo tanto, podemos imprimir dichos elementos o recopilarlos para su posterior proceso. Imprimiremos estos elementos en este caso.
A continuación se muestra la implementación del enfoque anterior:
Ejemplo:
// Java program to find the duplicate
// elements in a Stream
// using Collections.frequency()
import
java.util.*;
import
java.util.stream.*;
public
class
GfG {
// Function to find the
// duplicates in a Stream
public
static
<T> Set<T>
findDuplicateInStream(List<T> list)
{
// Return the set of duplicate elements
return
// Get the stream from the list
list.stream()
// Count the frequency of each element
// and filter the elements
// with frequency > 1
.filter(i -> Collections.frequency(list, i) >
1
)
// And Collect them in a Set
.collect(Collectors.toSet());
}
// Driver code
public
static
void
main(String[] args)
{
// Initial stream
List<Integer> list
= Arrays.asList(
5
,
13
,
4
,
21
,
13
,
27
,
2
,
59
,
59
,
34
);
// Print the found duplicate elements
System.out.println(
findDuplicateInStream(list));
}
}
Producción:[59, 13]
Publicación traducida automáticamente
Artículo escrito por SHUBHAMSINGH10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA