按值对java映射排序(其中包含一个集合)

按值对java映射排序(其中包含一个集合),java,sorting,dictionary,Java,Sorting,Dictionary,我有一张地图,看起来像 Map tupleMap=newhashmap() Word类没有什么特殊之处,它包含一些字符串,如value等等。我试图根据相关集合的元素数对该映射进行排序。因此,与它关联的单词最多的单词将是地图中的第一个/最后一个 我确实使用以下代码按键对该地图进行了排序: WordMapComparator bvc = new WordMapComparator(tupleMap); TreeMap<Word, Set<Word>> sortedTupleM

我有一张地图,看起来像

Map tupleMap=newhashmap()

Word
类没有什么特殊之处,它包含一些字符串,如
value
等等。我试图根据相关集合的元素数对该映射进行排序。因此,与它关联的单词最多的单词将是地图中的第一个/最后一个

我确实使用以下代码按键对该地图进行了排序:

WordMapComparator bvc = new WordMapComparator(tupleMap);
TreeMap<Word, Set<Word>> sortedTupleMap = new TreeMap<Word, Set<Word>>(bvc);
    sortedTupleMap.putAll(tupleMap); `
并使用

    1. for(Word w : sortedTupleMap.keySet()){
    2.  System.out.print(w.getValue() + " : ");
    3.  for(Word wo : sortedTupleMap.get(w)){
    4.      System.out.print(wo.getValue() + " ");
    5.  }
    6.  System.out.println();
    7. }    
我在第3行得到一个
null指针异常
,基本上,结果集为null

为什么会发生这种情况,而且,如何解决这一问题

万分感谢

return base.get(a).size() >= base.get(b).size() ? -1 : 1;
这显然是错误的:如果字数相同,它应该返回0,而不是1或-1,这取决于a和b的比较方式。只用

return Integer.compare(base.get(a).size(), base.get(b).size());

但是,这会使地图考虑所有与相同数量的关联词相等的单词,所以你需要用另一个标准来区分它们:

int result = Integer.compare(base.get(a).size(), base.get(b).size());
if (result == 0) {
    result = a.compareTo(b);
}
return result;

伟大的因此它不再给出NPE,但是,当按键排序时,地图包含约160个元素。像这样排序后,地图只包含12个。知道为什么吗?
return Integer.compare(base.get(a).size(), base.get(b).size());
int result = Integer.compare(base.get(a).size(), base.get(b).size());
if (result == 0) {
    result = a.compareTo(b);
}
return result;