[RESOLVIDO] Como agrupar e contar elementos de uma Lista

Bom dia a todos do GUJ.

Bom galera tou com o seguinte problema, tenho uma Lista onde posso ter vários elementos diferentes com quantidades diferentes.

Por exemplo, tenho um Lista com 3 valores (a, b e c) somando um total de 150.
Então gostaria de saber como que faço para agrupar todos os ‘a’ em um só e mostrar quantos dele tem na lista, e o mesmo para ‘b’ e ‘c’.

Com o código abaixo, consigo pegar todos os elementos e o valor da soma de todos retornado, mas o que eu gostaria era o que citei acima.

public class ClassFrequencia
{
    public static int getFrequencia(ArrayList<String> c)
    {
        int count = 0;

        for (int i = 0; i < c.size(); i++)
        {
            System.out.println("Nomes: " + c.get(i));
            count++;
        }

        return count;
    }
}

Alguém poderia de me dar uma idéia de como que posso fazer isso?
Desde de já obrigado pela ajuda de todos.

Oi.

Isso te serve?

[code]public static void main(String[] args) {
List inteiros = new ArrayList();
inteiros.add(10);
inteiros.add(1);
inteiros.add(10);
inteiros.add(2);
inteiros.add(10);
inteiros.add(7);
inteiros.add(10);
inteiros.add(5);

	int frequency = Collections.frequency(inteiros, 10);
	System.out.println(frequency);
}[/code]

Collections.frequecy.
Abraços.

Você pode criar uma coleção para armazenar A, uma para B e uma para C. Após isso, na sua iteração, você verifica: “nessa string contém ‘a’?” [Faça isso com o método contains das strings] Se conter, você adiciona na coleção de A’s. O mesmo vale para B e C!

Abraços, fique com Deus!

Mais o problema é que eu não sei quais os elementos eu tenho em minha Lista.

Então, eu gostaria de saber como que faço para pegar cada um desses elementos separadamente. Entendeu?

Com o que o nei passou, caso eu conseguisse pegar o nome separadamente de cada um daria certo.

Oi!

Eu li por cima e com pressa, mas veja se isso te ajuda:

[code] public static void main(String[] args) {
Map<String, Integer> map = new LinkedHashMap<String, Integer>();

	List<Integer> inteiros = new ArrayList<Integer>();
	inteiros.add(10);
	inteiros.add(1);
	inteiros.add(10);
	inteiros.add(2);
	inteiros.add(10);
	inteiros.add(7);
	inteiros.add(10);
	inteiros.add(5);
	
	Iterator<Integer> it = inteiros.iterator();
	while(it.hasNext()) {
		Object obj = it.next();
		int frequency = Collections.frequency(inteiros, obj);
		map.put(String.valueOf(obj), frequency);
	}
}[/code]

Dá para pensar em algo muito melhor mas quem sabe seja útil a você em algo :slight_smile:
É um esboço de uma idéia.

Abraço.

Com o seguinte código abaixo.

public class ClassFrequencia
{
    public static void getFrequencia(ArrayList<String> c)
    {
        while (c.size() != 0)
        {
            int count = 0;
            String nome = c.get(0);

            for (int i = 0; i < c.size(); i++)
            {
                if(nome.equals(c.get(i)))
                {
                    count++;
                    c.remove(i);
                }
            }

            System.out.println("Nome: " + nome + " Frequência: " + count);
        }

    }
}

Ele me retorna o seguinte

Nome: setosa Frequência: 25
Nome: setosa Frequência: 13
Nome: setosa Frequência: 6
Nome: setosa Frequência: 3
Nome: setosa Frequência: 2
Nome: setosa Frequência: 1
Nome: versicolor Frequência: 25
Nome: versicolor Frequência: 13
Nome: versicolor Frequência: 6
Nome: versicolor Frequência: 3
Nome: versicolor Frequência: 2
Nome: versicolor Frequência: 1
Nome: virginica Frequência: 25
Nome: virginica Frequência: 13
Nome: virginica Frequência: 6
Nome: virginica Frequência: 3
Nome: virginica Frequência: 2
Nome: virginica Frequência: 1

Só que eu gostaria era que me retornasse o seguinte:

Nome: setosa Frequencia: 50
Nome: versicolor Frequencia: 50
Nome: virgica Frequencia: 50

Entenderam?

Usa o método do nel, mas no lugar de inteiro usa o nome q tu precisa, string no caso.
Vai retornar a frequência em inteiro. Oq tu fez é mais complicado e está removendo valor sendo q tu só precisa contar q quantidade.

Irei testar aqui como o nei fez :slight_smile:
Desde de já obrigado pela dicas.

Do jeito que o nei falou dar pra fazer.
Mas, por questão de deixar mais interativo, deixei da seguinte forma abaixo.

[code]public static void getFrequenciaIris(ArrayList c)
{
while (c.size() != 0)
{
int count = 0;
String nome = c.get(0);

        for (int i = 0; i < c.size();)
        {
            if(nome.equals(c.get(i)))
            {
                count++;
                c.remove(i);
            }
            else { i++; }
        }

        System.out.println("Nome: " + nome + " Frequência: " + count);
    }
}

[/code]

Valeu pessoal pela ajuda.