【发布时间】:2015-04-26 09:44:51
【问题描述】:
我有一张看起来像的地图
Map<Word, Set<Word>> tupleMap = new HashMap<Word, Set<Word>>();
Word 类没有什么特别之处,它包含一些字符串,如value 等。我正在尝试按关联集的元素数量对该地图进行排序。因此,与它相关联的单词最多的单词将在地图中排在第一位/最后。
我确实设法使用此代码按其键对该地图进行排序:
WordMapComparator bvc = new WordMapComparator(tupleMap);
TreeMap<Word, Set<Word>> sortedTupleMap = new TreeMap<Word, Set<Word>>(bvc);
sortedTupleMap.putAll(tupleMap); `
比较器在哪里
class WordMapComparator implements Comparator<Word> {
Map<Word, Set<Word>> base;
public WordMapComparator(Map<Word, Set<Word>> tupleMap) {
this.base = tupleMap;
}
public int compare(Word a, Word b) {
return a.getValue().compareTo(b.getValue());
}
}
现在这工作得很好,所以地图会根据words 值进行排序。但是,我尝试了这个比较器:
class WordMapComparator implements Comparator<Word> {
Map<Word, Set<Word>> base;
public WordMapComparator(Map<Word, Set<Word>> tupleMap) {
this.base = tupleMap;
}
public int compare(Word a, Word b) {
return base.get(a).size() >= base.get(b).size() ? -1 : 1;
}
}
并使用
测试生成的地图 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 pointer exception,基本上,结果 Set 为空。
为什么会发生这种情况,此外,如何解决?
谢谢一百万!
【问题讨论】:
标签: java sorting dictionary