Я не уверен, видел ли я какой-либо ответ, который соответствовал бы моей ситуации, несмотря на кучу ответов для ситуаций, которые похожи.
В любом случае, я новичок в JAVA, поэтому, пожалуйста, будьте снисходительны.
Вот в чем дело:
У меня есть класс, который представляет, скажем, человека с именем, которое является строкой.
Также у меня есть компаратор (MyComparator), который реализует интерфейс Comparator для Person.
Конструктор Comparator предполагает, что все сопоставимые объекты (Persons) будут храниться в Map
.
В Comparator у меня есть метод int Compare (Person p1, Person p2), который написан следующим образом:
public int compare (Person personOne, Person personTwo) {
if (personsMap.get(personOne)>personsMap.get(personTwo)) {
return 1;
} else if (personsMap.get(personOne)
return -1;
} else {
return 0;
}
public static void main (String[] args) {
Person p1 = new Person ("Willy");
Person p2 = new Person ("Billy");
Person p3 = new Person ("Dilly");
Map
t = new HashMap();
t.put(p1,12);
t.put(p2,2);
t.put(p3,100);
List pl = new Arrays.asList(p1,p2,p3);
Collections.sort(pl, new MyComparator(t));
}
Я не уверен, видел ли я какой-либо ответ, который соответствовал бы моей ситуации, несмотря на кучу ответов для ситуаций, которые похожи. В любом случае, я новичок в JAVA, поэтому, пожалуйста, будьте снисходительны. Вот в чем дело: [list] [*]У меня есть класс, который представляет, скажем, человека с именем, которое является строкой.
[*]Также у меня есть компаратор (MyComparator), который реализует интерфейс Comparator для Person. Конструктор Comparator предполагает, что все сопоставимые объекты (Persons) будут храниться в Map . В Comparator у меня есть метод int Compare (Person p1, Person p2), который написан следующим образом: [code]public int compare (Person personOne, Person personTwo) { if (personsMap.get(personOne)>personsMap.get(personTwo)) { return 1; } else if (personsMap.get(personOne) return -1; } else { return 0; } [/code]
[/list] Когда я запускаю что-то вроде этого: [code]public static void main (String[] args) { Person p1 = new Person ("Willy"); Person p2 = new Person ("Billy"); Person p3 = new Person ("Dilly");
Map t = new HashMap(); t.put(p1,12); t.put(p2,2); t.put(p3,100);
List pl = new Arrays.asList(p1,p2,p3); Collections.sort(pl, new MyComparator(t)); } [/code] Я получаю NPE в MyComparator в следующей строке: [code] if (personsMap.get(p1)>personsMap.get(p2)) [/code] Пожалуйста, подскажите, как это исправить. Заранее спасибо.