olá , estou com um problema:
Tenho uma ArrayList e preciso retornar o elemento que mais se repeti nesta lista. Retornar um String ou seja o nome dele aqui no meu caso.
Bom . sei q não está muito claro a dúvida mas vamos tentar…
vleu
olá , estou com um problema:
Tenho uma ArrayList e preciso retornar o elemento que mais se repeti nesta lista. Retornar um String ou seja o nome dele aqui no meu caso.
Bom . sei q não está muito claro a dúvida mas vamos tentar…
vleu
Você poderia usar um Map<String, Integer> (eu suponho que os elementos sejam do tipo String).
Esse mapa deve ter como chave o elemento e como valor a contagem desses elementos.
Por exemplo, digamos que você tivesse as strings "luis", "luis", "carlos", "carlos", "carlos", "maria".
Ao final da inserção no mapa, você deveria ter algo como:
"luis" -> 2
"carlos" -> 3
"maria" -> 1
A seguir, você deveria percorrer o mapa e ver qual dos elementos contém a maior contagem.
Crie dois for’s
Compare cada posição do primeiro com o segundo.
Quando for igual vc soma em uma variavel… Ai é só contralar o contator de repetições.
Conseguiu entender ?
Segue um exemplo.
public static void main(String... a){
HashMap<String, Integer> hm = new HashMap<String, Integer>();
String nomesEntrada = "teste2,teste1,teste1,teste2,teste2,teste3,teste4,teste1,teste1";
StringTokenizer token = new StringTokenizer(nomesEntrada,",");
String nomeApoio = null;
while(token.hasMoreTokens()){
nomeApoio = token.nextToken();
//ADICIONA NO HASH CONTANDO QUANTAS OCORRENCIAS
if( hm.get(nomeApoio) != null ){
hm.put(nomeApoio,hm.get(nomeApoio)+1);
}else{
hm.put(nomeApoio,1);
}
}
Integer valorMaximo = 0;
String nomeSaida = null;
token = new StringTokenizer(nomesEntrada,",");
while(token.hasMoreTokens()){
nomeApoio = token.nextToken();
//VERIFICA QUAL É O QUE TEM MAIOR VALOR SIGNIFICATIVO
if(hm.get(nomeApoio) > valorMaximo ){
valorMaximo = hm.get(nomeApoio);
nomeSaida = nomeApoio;
}
}
System.out.println(nomeSaida);
}
public String getMaiorVencedorCasa(){
ArrayList<Partida> vencedoresCasa = new ArrayList<Partida>();
for(Partida p : partidas)
if(p.getVencedor() == true)
vencedoresCasa.add(p);
for(int i = 0; i < vencedoresCasa.size(); i++)
vencedoresCasa.get(i).getMandante() ;
Primeiramente tenho um ArrayList partidas, algums elementos desta lista foram adicionadas em outra ArrayList chamada VencedoresCasa.
o que eu quero fazer é pegar o elemento q mais se repete dentro do ArrayList VencedoresCasa
Só que eu preciso retornar apenas um atributo desta lista que é o nome, então estou usando o getMandante()
entendeu?
como faço?
Primeiro você terá
- um loop para contar quantas vezes cada elemento se repete
- um loop para descobrir qual é o que mais ganhou
Você terá que criar uma forma de realizar esta tarefa sugiro o HashMap.
Você pode adaptar o meu exemplo e ao invés
while(token.hasMoreTokens()){
nomeApoio = token.nextToken();
//ADICIONA NO HASH CONTANDO QUANTAS OCORRENCIAS
if( hm.get(nomeApoio) != null ){
hm.put(nomeApoio,hm.get(nomeApoio)+1);
}else{
hm.put(nomeApoio,1);
}
}
para
for(int i = 0; i < vencedoresCasa.size(); i++) {
//ADICIONA NO HASH CONTANDO QUANTAS OCORRENCIAS
if( hm.get(vencedoresCasa.get(i).getMandante() ) != null ){
hm.put(vencedoresCasa.get(i).getMandante() ,hm.get(vencedoresCasa.get(i).getMandante() )+1);
}else{
hm.put(vencedoresCasa.get(i).getMandante() ,1);
}
}