Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Buscar valores coincidentes repetidos

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.

octubre 6, 2013 | Unregistered Commentervelcevu

No tengo claro qué es lo que quieres lograr, ¿Saber cuáles están repetidos, o eliminarlos?

octubre 6, 2013 | Registered Commenterchoces

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

octubre 6, 2013 | Unregistered Commentervelcevu

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;
}

octubre 6, 2013 | Registered Commenterchoces

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()));
}
}

octubre 7, 2013 | Registered Commenterchoces

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

octubre 7, 2013 | Unregistered CommenterUnoPorAhi

Sí, es redundante e innecesario, en este caso tan sencillo.
A veces, la programación defensiva lleva a "defectos" como éste ;)

octubre 7, 2013 | Registered Commenterchoces

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);
}
}

octubre 7, 2013 | Registered Commenterchoces

El creador de este hilo ni se da por aludido...
No vale la pena molestarse en contestar dudas...

octubre 8, 2013 | Registered Commenterchoces

A mí me sirvió :)

octubre 16, 2013 | Unregistered CommenterFantasma Escritor

//Elimina los componentes duplicados del array completo.
HashSet<String> hashSet = new HashSet<String>(arrayEntrada);
entrada.clear();
entrada.addAll(arrayEntrada);

marzo 6, 2015 | Unregistered CommenterManu

//Ahora si se entiende.
HashSet<String> hashSet = new HashSet<String>(entrada);
entrada.clear();
entrada.addAll(hashSet);

marzo 6, 2015 | Unregistered CommenterManu

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.

marzo 6, 2015 | Registered Commenterchoces