Strings counter in ArrayList [duplicate]

0

I need the program to return the amount of times each% of% was repeated within String , but I could not think of a way to have my counter reused for each item, as it shows there at the output, he says that the data 3 repeated 4, 5 and 6 times. Would it be better to make a public function and just call it in ArrayList ? How can I resolve?

public static void main(String args[]) {
    ArrayList<String> dados= new ArrayList<String>();
    dados.add("Dado 2");
    dados.add("Dado 1");
    dados.add("Dado 3");
    dados.add("Dado 3");
    dados.add("Dado 2");
    dados.add("Dado 1");
    dados.add("Dado 3");
    dados.add("Dado 3");
    Collections.sort(dados);  
    //while(dados.contains(dados)){
      //  System.out.println("deu certo");
    //}       
    //for (String x : dados){
    //    System.out.println(x);
    //    if (x.contains(x))
   // }     
    int i;
    int contador = 0;
    int x = 1;
    int tamanho = dados.size();
    for (i = 0; i<tamanho; i++){        
        System.out.println(dados.get(i));
            if (x<dados.size() && dados.get(i).equals(dados.get(x++))){
            contador++;
            }
            System.out.print("repetiu:"); System.out.println(contador+1);
    } 
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new main().setVisible(true);
        }
    });
}

Output Code:

    
asked by anonymous 30.08.2017 / 19:39

2 answers

0

To count the number of occurrences of the same object / record in a list you can use the static method frequency() of class Collections .

You only need to do:

int qtdDado1 = Collections.frequency(dados, "Dado 1");
int qtdDado2 = Collections.frequency(dados, "Dado 2");
int qtdDado3 = Collections.frequency(dados, "Dado 3");

Source: Mkyong

    
31.08.2017 / 00:21
0

Use Map and the compute method to assemble a histogram of words. Using TreeMap , the ordering is already free :

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

class Frequencias {
    public static void main(String[] args) {
        List<String> dados = new ArrayList<>();
        dados.add("Dado 2");
        dados.add("Dado 1");
        dados.add("Dado 3");
        dados.add("Dado 3");
        dados.add("Dado 2");
        dados.add("Dado 1");
        dados.add("Dado 3");
        dados.add("Dado 3");

        Map<String, Integer> frequencias = new TreeMap<>();
        for (String c : dados) {
            frequencias.compute(c, (k, v) -> v == null ? 1 : v + 1);
        }

        frequencias.forEach((k, v) -> System.out.println(k + " aparece " + v + " vezes."));
    }
}

This is the output produced:

Dado 1 aparece 2 vezes.
Dado 2 aparece 2 vezes.
Dado 3 aparece 4 vezes.

See here working on ideone.

    
30.08.2017 / 20:35