Foro sobre Java SE > Buscar valores coincidentes repetidos
No tengo claro qué es lo que quieres lograr, ¿Saber cuáles están repetidos, o eliminarlos?
choces
Necesito eliminar los repetidos y solo dejar 1
en el caso numerico a ver si ayuda mas
tengo una matriz con los siguientes numeros
1 2 3 4 1 2 3 1 1 1 1 2 3 4 5 6 7 4 2 2
Aqui silo donde hay 4 unos debo dejar 1 y donde hay dos 2 solo debo debajar uno matriz final.
1 2 3 4 1 2 3 1 2 3 4 5 6 7 4 2
Descarto los repetidos
velcevu
Usa un iterador sobre esa lista, y si se cumple la condición que has definido, elimínalo del iterador con remove
Por ejemplo:
List<Integer> numeros = new ArrayList<>(Arrays.asList(1, 2 ,3 ,4, 1, 2, 3, 1, 1, 1, 1, 2 ,3 ,4, 5, 6, 7, 4, 2 ,2));
Iterator<Integer> it = numeros.iterator();
while (it.hasNext()) {
Integer numero = it.next(); // es necesario usar next antes del remove
// tu condición
it.remove(); // si se cumple la condición, elimina el número actual
}
Seguidamente, puedes convertir el iterador it resultante en una List:
public static <T> List<T> copyIterator(Iterator<T> iter) {
List<T> copy = new ArrayList<T>();
while (iter.hasNext())
copy.add(iter.next());
return copy;
}
choces
Creo que quedará más claro con un test.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class Test {
public static <T> List<T> copyIterator(Iterator<T> iter) {
List<T> copy = new ArrayList<>();
while (iter.hasNext()) {
copy.add(iter.next());
}
return copy;
}
public static void main(String[] args) {
Integer anterior = null;
List<Integer> numeros = new ArrayList<>(Arrays.asList(1, 2, 3, 3, 4, 1, 2, 3, 1, 1, 1, 1, 2, 3, 4, 5, 5, 6, 7, 4, 2, 2));
Iterator<Integer> it = numeros.iterator();
while (it.hasNext()) {
Integer numero = it.next();
if (numero.equals(anterior)) {
it.remove();
}
anterior = numero;
}
System.out.println(copyIterator(numeros.iterator()));
}
}
choces
Buenas choces,
Yo no entiendo porque haces ese copyIterator. Me parece redundante.
Si ya has eliminado los elementos de la lista, no basta con hacer:
System.out.println(numeros);
???
Un saludo
UnoPorAhi
Sí, es redundante e innecesario, en este caso tan sencillo.
A veces, la programación defensiva lleva a "defectos" como éste ;)
choces
También se puede resolver así:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
public class Test {
public static void main(String[] args) {
Integer anterior = null;
List<Integer> numeros = new ArrayList<>(Arrays.asList(1, 2, 3, 3, 4, 1, 2, 3, 1, 1, 1, 1, 2, 3, 4, 5, 5, 6, 7, 4, 2, 2));
for (ListIterator<Integer> it = numeros.listIterator(); it.hasNext();) {
Integer numero = it.next();
if (numero.equals(anterior)) {
it.remove();
}
anterior = numero;
}
System.out.println(numeros);
}
}
choces
El creador de este hilo ni se da por aludido...
No vale la pena molestarse en contestar dudas...
choces
A mí me sirvió :)
Fantasma Escritor
//Elimina los componentes duplicados del array completo.
HashSet<String> hashSet = new HashSet<String>(arrayEntrada);
entrada.clear();
entrada.addAll(arrayEntrada);
Manu
//Ahora si se entiende.
HashSet<String> hashSet = new HashSet<String>(entrada);
entrada.clear();
entrada.addAll(hashSet);
Manu
No Manu, eso no es lo que pide.
No quiere eliminar todos los repetidos de la lista, sino que cuando haya una secuencia de repetidos, dentro de la lista, deje solo un valor, y elimine los restantes.
Si ejecutas mi último test, verás el resultado.
choces

Hola tengo un array del siguiente tipo.
a b c c c d c d e a a original
a b c d c d e a Final
Como veis si son consecutivos i repetidos solo tengo que dejar un Valor mirar el caso de la c y la A no elimino los repetidos.
Lo que no tengo claro es como hacerlo algo si
si original[i].equalsOriginall[i+1] {
Pero aqui me quedo
}
Alguna ayuda Gracias.