Boa tarde galera estou com um problema quando tento ordenar um TreeMap por valores.
A ideia é fazer um rank de palavras. Para isso tenho um TreeMap do tipo TreeMap<String,List>, onde String é a chave e o list é uma lista de anos
em que a palavra chave ocorre. Gostaria que ela seja ordenada pelo tamanho da list.
Segue abaixo a função que adiciona uma palavra ao rank. Essa função recebe o rank de palavras que é um TreeMap,lista de palavras a serem inseridas no o rank listTerms e o ano(year) em que as palavras ocorrem.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.TreeMap;
public class Rank{
public static TreeMap<String,List<Integer>> addRank(TreeMap<String,List<Integer>> rank,ArrayList<String> listTerms,int year){
for(String term : listTerms){
if(rank.containsKey(term)){
List<Integer> years1 = new ArrayList<Integer>();
years1 = rank.get(term);
years1.add(year);
Collections.sort(years1);
rank.remove(term);
rank.put(term, years1);
}else{
List<Integer> years2 = new ArrayList<Integer>();
years2.add(year);
rank.put(term,years2);
}
}
ValueComparator bvc = new ValueComparator();
bvc.setComparator(rank);
TreeMap<String,List<Integer>> neoRank = new TreeMap<String,List<Integer>>(bvc);
neoRank.putAll(rank);
return neoRank;
}
}
Segue abaixo a implementação da interface Comparator
public class ValueComparator implements Comparator<String> {
TreeMap<String,List<Integer>> base;
public void setComparator(TreeMap<String,List<Integer>> base){
this.base = base;
}
@Override
public int compare(String key1,String key2) {
// TODO Auto-generated method stub
List<Integer> years1 = base.get(key1);
List<Integer> years2 = base.get(key2);
Integer y1 = years1.size();
Integer y2 = years2.size();
return y1.compareTo(y2);
}
}
Quando eu chamo a função addRank uma vez o rank é criado normalmente, mas qd eu chamo a função 2 ou mais vezes
ocorre um NullPointerException na linha Integer y1 = years1.size();.
Alguém pode me dizer se eu implementei a interface Comparator da forma correta.