Não repetir números em uma lista

22 respostas
jkrfabio

Olá, tenho uma lista assim:

1
2
3
4
5
6
7
8
9
10

1
2
3
4
5
6
7
8
9
10

Como faço para printar na tela somente até o primeiro 10 da lista? Existe algum método, função para isto?

22 Respostas

E

Procure por java.util.Set (no seu caso, use java.util.LinkedHashSet ou java.util.TreeSet). Ele não permite que elementos repetidos sejam adicionados.

d34d_d3v1l
/**
	 * Remove elementos repetidos de uma lista.
	 * Não guarda a ordem dos registros.
	 * @param list
	 * @return
	 */
	public static <T> List<T> removeRepeatedValues(List<T> list){
		List<T> novaLista = new ArrayList<T>(new HashSet<T>(list));
		return novaLista;
	}
jkrfabio

Consegui resolver com este método

Set<String> semRepeticao = new LinkedHashSet<String>(); for (String valor: array) { semRepeticao.add(valor); }

jkrfabio

jkrfabio:
Consegui resolver com este método

Set<String> semRepeticao = new LinkedHashSet<String>(); for (String valor: array) { semRepeticao.add(valor); }

Agora como converter este meu Set para uma List ?

nel

Teste:

Set<String> set = new HashSet<>(2);
		set.add("1");
		set.add("0");
		
		List<String> s = new ArrayList<>(2);
		s.addAll(set);

E porque a lista é de String se contém números?

K
List<Integer> numerosNaoRepetidos = new ArrayList<Integer>(outraColecao);
jkrfabio

nel:
Teste:

Set<String> set = new HashSet<>(2);
		set.add("1");
		set.add("0");
		
		List<String> s = new ArrayList<>(2);
		s.addAll(set);

E porque a lista é de String se contém números?

por que aqui os meus números estão como string (coisas do chefe)
funcionou perfeitamente!

Mas agora como ordeno os números?
lembrando que eles estão em string, como faço isso?

Não precisa seguir nem meu exemplo, vou dar outro: “2”,“3”,“1”. como ordenar minhas strings para 1, 2 e 3?

Rodrigo_Sasaki
A classe String já implementa Comparable, então é só ordenar:
public static void main(String[] args){
		List<String> strings = new ArrayList<String>();
		strings.add("3");
		strings.add("2");
		strings.add("1");
		System.out.println(strings);

		Collections.sort(strings);
		System.out.println(strings);
	}
natanaelv

Se você usar um TreeSet em vez de um HashSet os valores serão ordenados na ordem natural.

jkrfabio
Rodrigo Sasaki:
A classe String já implementa Comparable, então é só ordenar:
public static void main(String[] args){
		List<String> strings = new ArrayList<String>();
		strings.add("3");
		strings.add("2");
		strings.add("1");
		System.out.println(strings);

		Collections.sort(strings);
		System.out.println(strings);
	}

Funcionou, mas vamos supor que eu tenha "1","2".. até "10" embaralhados
com o collections.sort ele irá me retornar assim: 1, 10, 2, 3, 4, 5, 6, 7, 8, 9. O que não é uma ordem correta, tem outra forma de retornar a ordem de 1 a 10?

E

Fabio, use inteiros, não strings para sua lista. Quanto é 1 + 1?

Para strings, 1 + 1 == 11 (ha ha ha)

d34d_d3v1l

Por qual motivo divino não usou o método que postei pra ti ?

faz exatamente tudo o q vc ta tentando com o for…
só que em 2 linhas de código… asudhhuahuasdhud
francamente…

jkrfabio
d34d_d3v1l:
Por qual motivo divino não usou o método que postei pra ti ? faz exatamente tudo o q vc ta tentando com o for... só que em 2 linhas de código... asudhhuahuasdhud francamente...
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class calcular {

	public static void main(String[] args) {
		
		List<String> lista = new ArrayList<String>();
		
		lista.add("3");
		lista.add("2");
		lista.add("1");
		lista.add("3");
		lista.add("2");
		lista.add("1");
		lista.add("4");
		
		public static List<String> removeRepeatedValues(List<String> lista)
		{  
		    List<String> novaLista = new ArrayList<String>(new HashSet<String>(lista));  
		    return novaLista;  
		} 


	}
}

Implementei errado?

nel

Tu compilou esse código ?
Eu tenho a leve impressão que tem um método dentro de outro.

jkrfabio
nel:
Tu compilou esse código ? Eu tenho a leve impressão que tem um método dentro de outro.

agora tá funcionando..

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class calcular {

	public static void main(String[] args) {
		
		List<String> lista = new ArrayList<String>();
		
		lista.add("3");
		lista.add("2");
		lista.add("1");
		lista.add("3");
		lista.add("2");
		lista.add("1");
		lista.add("4");
		
		calcular a = new calcular();
		System.out.println(a.removeRepeatedValues(lista));
		
	}
	
	public List<String> removeRepeatedValues(List<String> lista)
	{  
	    List<String> novaLista = new ArrayList<String>(new HashSet<String>(lista));  
	    return novaLista;  
	}
}

Mas está printando [3, 2, 1, 4]. Ou seja, fora de ordem

nel

Claro, o HashSet vai apenas remover valores repetidos e não ordenar. Para fazer ambos, use TreeSet.

jkrfabio
nel:
Claro, o HashSet vai apenas remover valores repetidos e não ordenar. Para fazer ambos, use TreeSet.
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class calcular {

	public static void main(String[] args) {

		List<String> lista = new ArrayList<String>();

		lista.add("3");
		lista.add("2");
		lista.add("1");
		lista.add("3");
		lista.add("2");
		lista.add("10");
		lista.add("4");

		calcular a = new calcular();
		System.out.println(a.removeRepeatedValues(lista));

	}

	public List<String> removeRepeatedValues(List<String> lista) {
		List<String> novaLista = new ArrayList<String>(new HashSet<String>(
				lista));
		Collections.sort(novaLista);
		return novaLista;
	}
}

A saída: 1, 10, 2, 3, 4. O mais indicado para ordenar de forma correta seria com o TreeSet mesmo né?

nel
jkrfabio:
nel:
Claro, o HashSet vai apenas remover valores repetidos e não ordenar. Para fazer ambos, use TreeSet.
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class calcular {

	public static void main(String[] args) {

		List<String> lista = new ArrayList<String>();

		lista.add("3");
		lista.add("2");
		lista.add("1");
		lista.add("3");
		lista.add("2");
		lista.add("10");
		lista.add("4");

		calcular a = new calcular();
		System.out.println(a.removeRepeatedValues(lista));

	}

	public List<String> removeRepeatedValues(List<String> lista) {
		List<String> novaLista = new ArrayList<String>(new HashSet<String>(
				lista));
		Collections.sort(novaLista);
		return novaLista;
	}
}

A saída: 1, 10, 2, 3, 4. O mais indicado para ordenar de forma correta seria com o TreeSet mesmo né?

Assim também funciona, acontece que o Java entende que uma String "10" deve vir antes de um "2", entendeu?
Por isso o entanglement disse para você usar inteiros, que é o correto nesse caso. Ai, ficaria assim, simples:

List<Integer> lista = new ArrayList<>();  
		lista.add(3);  
        lista.add(2);  
        lista.add(1);  
        lista.add(3);  
        lista.add(2);  
        lista.add(10);  
        lista.add(4);  
        
        List<Integer> novaLista = new ArrayList<>(new TreeSet<>(lista));
        for (Integer value : novaLista) {
        	System.out.println(value);
        }
jkrfabio
nel:
jkrfabio:
nel:
Claro, o HashSet vai apenas remover valores repetidos e não ordenar. Para fazer ambos, use TreeSet.
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class calcular {

	public static void main(String[] args) {

		List<String> lista = new ArrayList<String>();

		lista.add("3");
		lista.add("2");
		lista.add("1");
		lista.add("3");
		lista.add("2");
		lista.add("10");
		lista.add("4");

		calcular a = new calcular();
		System.out.println(a.removeRepeatedValues(lista));

	}

	public List<String> removeRepeatedValues(List<String> lista) {
		List<String> novaLista = new ArrayList<String>(new HashSet<String>(
				lista));
		Collections.sort(novaLista);
		return novaLista;
	}
}

A saída: 1, 10, 2, 3, 4. O mais indicado para ordenar de forma correta seria com o TreeSet mesmo né?

Assim também funciona, acontece que o Java entende que uma String "10" deve vir antes de um "2", entendeu?
Por isso o entanglement disse para você usar inteiros, que é o correto nesse caso. Ai, ficaria assim, simples:

List<Integer> lista = new ArrayList<>();  
		lista.add(3);  
        lista.add(2);  
        lista.add(1);  
        lista.add(3);  
        lista.add(2);  
        lista.add(10);  
        lista.add(4);  
        
        List<Integer> novaLista = new ArrayList<>(new TreeSet<>(lista));
        for (Integer value : novaLista) {
        	System.out.println(value);
        }

Mas na minha tarefa tenho que dar um jeito de colocar esse 10 por último rs, ele tem porque tem que ser em string..

TheViq

[color=darkred] Chefe sádico (?) aIUEHIuaeh kiddin ’ :lol:
sou newbie ainda , mas nesse caso da lista ter que ser String ,
uma conversão final para saída não resolveria?

Desculpe se eu estiver falando bobagem ![/color] :roll:

jkrfabio
SawaKo:
[color=darkred] Chefe sádico (?) aIUEHIuaeh kiddin ' :lol: sou newbie ainda , mas nesse caso da lista ter que ser String , uma conversão final para saída não resolveria?

Desculpe se eu estiver falando bobagem ![/color] :roll:

A minha lista já está em string, olhe:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class calcular {

	public static void main(String[] args) {

		List<String> lista = new ArrayList<String>();

		lista.add("10000");
		lista.add("20000");
		lista.add("30000");
		lista.add("40000");
		lista.add("50000");
		lista.add("60000");
		lista.add("70000");
		lista.add("80000");
		lista.add("90000");
		lista.add("100000");
		lista.add("10000");
		lista.add("20000");
		lista.add("30000");
		lista.add("40000");
		lista.add("50000");
		lista.add("60000");
		lista.add("70000");
		lista.add("80000");
		lista.add("90000");
		lista.add("100000");
		lista.add("10000");
		lista.add("20000");
		lista.add("30000");
		lista.add("40000");
		lista.add("50000");
		lista.add("60000");
		lista.add("70000");
		lista.add("80000");
		lista.add("90000");
		lista.add("100000");
		lista.add("10000");
		lista.add("20000");
		lista.add("30000");
		lista.add("40000");
		lista.add("50000");
		lista.add("60000");
		lista.add("70000");
		lista.add("80000");
		lista.add("90000");
		lista.add("100000");
		

		calcular a = new calcular();
		System.out.println(a.removeRepeatedValues(lista));

	}

	public List<String> removeRepeatedValues(List<String> lista) {
		List<String> novaLista = new ArrayList<String>(new HashSet<String>(
				lista));
		Collections.sort(novaLista);
		return novaLista;
	}
}
mi.rodrigues
jkrfabio:
d34d_d3v1l:
Por qual motivo divino não usou o método que postei pra ti ? faz exatamente tudo o q vc ta tentando com o for... só que em 2 linhas de código... asudhhuahuasdhud francamente...
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;

public class calcular {

	public static void main(String[] args) {
		
		List<String> lista = new ArrayList<String>();
		
		lista.add("3");
		lista.add("2");
		lista.add("1");
		lista.add("3");
		lista.add("2");
		lista.add("1");
		lista.add("4");
		
		public static List<String> removeRepeatedValues(List<String> lista)
		{  
		    List<String> novaLista = new ArrayList<String>(new HashSet<String>(lista));  
		    return novaLista;  
		} 


	}
}

Implementei errado?

Coloca List fora do Main.

Criado 20 de março de 2013
Ultima resposta 20 de mar. de 2013
Respostas 22
Participantes 9