you have to write your own java.util.Comparator
to do customized sorting. Default String sorting is alphabetical.
EDITED to meet new requirements to group sorting by no asterisks, then all with 1 then all with 2 etc
If you want to group sorting by no asterisks, then all with 1 then all with 2 etc and then inside each grouping, sort alphabetically, then you probably want something like this:
public class AsterisksLast implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
int numAsterisksInO1 = numberOfAsterisksIn(o1);
int numAsterisksInO2 = numberOfAsterisksIn(o2);
if(numAsterisksInO1 == numAsterisksInO2){
//both contain same number of asterisks
//(which may be 0)
//sort
//alphabetically
return o1.compareTo(o2);
}
//different number of asterisks sort by fewest
return Integer.compare(numAsterisksInO1, numAsterisksInO2);
}
private int numberOfAsterisksIn(String s){
char[] chars =s.toCharArray();
int count=0;
for(int i=0; i<chars.length; i++){
if(chars[i] == '*'){
count++;
}
}
return count;
}
}
then you need to give it to your TreeSet
SortedSet<String> orderedValues = new TreeSet<String>(new AsterisksLast());
orderedValues.addAll(myHashMap.values());