0

Is there a way to sort this on the frequency (Descending/Ascending)?

public static void main(String[] args)
{
Map <String, Data> map = new HashMap <String, Data>();

String [] variables={"variable1", "variable2", "variable3", "variable4", "variable4", "variable1","variable1"};
int Concreteness=5;//for this example every variable will have the same cncreteness

for(int i=0; i<variables.length;i++)
{
    Data variable_exists=map.get(variables[i]);

    if(variable_exists!=null)
    variable_exists.setFrecuency(variable_exists.getFrecuency()+1);
    else
    map.put(variables[i], new Data(Concreteness,1));

}

for (Map.Entry<String, Data> entry : map.entrySet()) 
{ System.out.println("variable = " + entry.getKey() + ", Frecuency = " + entry.getValue().getFrecuency()+ ", Concreteness = " + entry.getValue().getConcreteness()); }
}

the output for this example would be

variable = variable4, Frecuency = 2, Concreteness = 5

variable = variable1, Frecuency = 3, Concreteness = 5

variable = variable2, Frecuency = 1, Concreteness = 5

variable = variable3, Frecuency = 1, Concreteness = 5

and here is the Data class i used

public class Data
{
    private int frecuency;
    private int Concreteness;

    Data (int Concreteness, int frecuency)
    {
    setFrecuency(frecuency);
    setConcreteness(Concreteness);
    }
    public int getFrecuency()
    {
    return frecuency;
    }

    public void setFrecuency(int frecuenxy)
    {
    this.frecuency = frecuenxy;
    }

    public int getConcreteness()
    {
    return Concreteness;
    }

    public void setConcreteness(int Concreteness)
    {
    this.Concreteness = Concreteness;
    }
}
kalame04
  • 75
  • 7

1 Answers1

2

You cannot sort HashMap<K,V>, but if you create a list of its key-value pairs

List<Map.Entry<String,Data>> entries = new ArrayList<Map.Entry<String,Data>>(map.entrySet());

you would be able to sort it using a custom comparator. Here is a link to Q&A explaining how this can be done.

Community
  • 1
  • 1
Sergey Kalinichenko
  • 714,442
  • 84
  • 1,110
  • 1,523