按值对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;