package teste;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
public class Teste {
public static void main(String[] args) {
Collection lista = new ArrayList();
lista.add("1");
lista.add("2");
lista.add("4");
lista.add("5");
lista.add("1");
lista.add("1");
lista = Collections.singleton(new HashSet(lista));
for (Object object : lista) {
System.out.println(object.toString());
}
}
}
Minha dúvida é o seguinte, por exemplo como imprimir apenas o elemento repetido e apenas um vez, no exemplo acima só seria impresso o numero 1, que repete 3 vezes, e seria apenas impresso 1 vez, informando que o unico que repetiu foi o 1. No código que postei acima faz o contrário que quero, ele verifica os repetido e exclui, deixando somente números sem respetição…alguém poderia me ajudar ???
Você pode criar um HashSet chamado ‘numerosImpressos’, quando você iterar sobre a lista você verifica se o número foi inserido no HashSet. Se não foi inserido você imprime e adiciona no HashSet, caso contrário, você continua o loop.
Você também pode criar um HashMap (HashMap<String, Integer>) onde a chave é o número impresso, e o valor é o contador de números repetidos. Ai para cada número que adicionar atualiza o seu contador.
Fiz um exemplo para você ter idéia do uso do hash para utilizar o contador. Agora é só você aplicar a sua lógica…
public class Teste {
public static void main(String[] args) {
Collection<Integer> lista = new ArrayList<Integer>();
lista.add(1);
lista.add(2);
lista.add(4);
lista.add(5);
lista.add(1);
lista.add(1);
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer l : lista) {
int count = map.get(l) != null ? map.get(l) : 0;
map.put(l, ++count);
}
for (Integer n : map.keySet()) {
System.out.printf("O número %d repetiu %d vez(es)\n", n, map.get(n));
}
}
}
Bom amigo, verifiquei aqui bastante interessante, porém esse método não exclui os números repetidos da lista, deixando apenas os repetidos, que eu quero é exluir o que não são repetidos, e deixar os que são repetidos porém uma única vez, ex: tem 2,3,4,4,4 … no conjunto seria somente 4…entendeu ??? obrigado mais uma vez !
E, por favor, quando for postar tópicos, não use palavras como “URGENTE”, “IMPORTANTE”, “PLEASE” no título.
O fórum não é local de urgências, e isso mostra que você quer mais destaques do que os demais usuários, o que é considerado falta de etiqueta.
Em relação a dica que você me passou, poderia me passar um exemplo de como usar esse set, não estou entendo como fazer o set que você me falou… obrigado mais uma vez.
[quote=felipehts]Realmente é urgente, mas tudo bem já entendi…
Em relação a dica que você me passou, poderia me passar um exemplo de como usar esse set, não estou entendo como fazer o set que você me falou… obrigado mais uma vez.[/quote]
Pelo que ele falou parece ser assim, mas me perdi na lógica então, porque retorna 2,1,5,4:
[quote=rcipriani][quote=felipehts]Realmente é urgente, mas tudo bem já entendi…
Em relação a dica que você me passou, poderia me passar um exemplo de como usar esse set, não estou entendo como fazer o set que você me falou… obrigado mais uma vez.[/quote]
Pelo que ele falou parece ser assim, mas me perdi na lógica então, porque retorna 2,1,5,4:
public static void main(String[] args) {
ArrayList<String> lista = new ArrayList<String>();
lista.add("1");
lista.add("2");
lista.add("4");
lista.add("5");
lista.add("1");
lista.add("1");
Set<String> set = new HashSet<String>();
set.addAll(lista);
lista.removeAll(set);
set.addAll(lista);
for (Object object : set) {
System.out.println(object.toString());
}
}
} [/code][/quote]
Neste exemplo acima do conjunto dos números: “1,2,4,5,1,1” eu gostaria que retornasse apenas o número 1, já que é o unico que repeti, porém mesmo respetindo varias vezes, quero que retorne apenas uma vez o número repetido …ou seja retorna somente uma vez o “1”…E PRONTO…mas nada…vlw ai
OBS:meu trabalho é sobre conjuntos, então gostaria de pegar apenas a intercessão dos conjuntos, ou seja apenas o que tem em comum…entendi…vlw
public static void main(String[] args) {
ArrayList<String> lista = new ArrayList<String>();
lista.add("1");
lista.add("2");
lista.add("4");
lista.add("5");
lista.add("1");
lista.add("1");
//Copiar a lista para um set. Isso dará todos os elementos,
//sem duplicação
Set<String> set = new HashSet<String>(lista);
//Eliminar a primeira ocorrência daquele elemento da lista
//Com isso, só as duplicações sobrarão.
for (String element : set)
lista.remove(element);
//Copiar o resultado para um set.
//Isso garante que elementos que apareciam mais de 2 vezes agora só apareçam uma única vez.
Set<String> set2 = new TreeSet<String>(lista);
for (String element : set2) {
System.out.println(element);
}
}
}[/code]
O método removeAll não pode ser usado nesse caso, pois ele remove todas as ocorrências de uma String na lista, não só a primeira.
[quote=felipehts]Neste exemplo acima do conjunto dos números: “1,2,4,5,1,1” eu gostaria que retornasse apenas o número 1, já que é o unico que repeti, porém mesmo respetindo varias vezes, quero que retorne apenas uma vez o número repetido …ou seja retorna somente uma vez o “1”…E PRONTO…mas nada…vlw ai
OBS:meu trabalho é sobre conjuntos, então gostaria de pegar apenas a intercessão dos conjuntos, ou seja apenas o que tem em comum…entendi…vlw [/quote]
Só faz sentido falar em interseção, se você tiver dois conjuntos. Como você falou, precisa ter “algo em comum”.
Nesse caso, você tem apenas um único conjunto, então, não existe interseção nenhuma.
A classe Set representa justamente um conjunto, onde seus elementos internos não se repetem.
Set conjunto2 = new TreeSet();
conjunto2.add(1);
conjunto2.add(2);
conjunto2.add(4);
conjunto2.add(8);
//Tiramos uma cópia do conjunto1
Set conjunto3 = new TreeSet(conjunto1);
conjunto3.retainAll(conjunto2);
System.out.println(conjunto3);
//Como a interseção é comutativa, o inverso dará o mesmo resultado
Set conjunto4 = new TreeSet(conjunto2);
conjunto4.retainAll(conjunto1);
System.out.println(conjunto4);
[/code]
Obviamente, como eu falei, só tem sentido falar em interseção se você tem dois conjuntos.
Set conjunto2 = new TreeSet();
conjunto1.add(1);
conjunto1.add(2);
conjunto1.add(4);
conjunto1.add(8);
//Tiramos uma cópia do conjunto1
Set conjunto3 = new TreeSet(conjunto1);
conjunto3.retainAll(conjunto2);
System.out.println(conjunto3);
//Como a interseção é comutativa, o inverso dará o mesmo resultado
Set conjunto4 = new TreeSet(conjunto2);
conjunto4.retainAll(conjunto1);
System.out.println(conjunto4);
[/code]
Obviamente, como eu falei, só tem sentido falar em interseção se você tem dois conjuntos.[/quote]
Obrigado pela aula ! Realmente era isso quer precisava, porém testei aqui, e a impressão foi essa:
“run:
[]
[]
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)”
ficou vazio a impressão, sabe me dizer o porque ?? vlw obrigado.