Map.keySet () и Set.addAll выбрасывает исключение NullPoniterException - PullRequest
1 голос
/ 14 октября 2011

Это старый код, и я отлаживаю его. У меня есть Map (myMap) с размером 2 (точно). Клавиши null и 1.

SortedSet mySet = new TreeSet();
mySet.addAll(myMap.keySet());
Iterator mySetIterator = mySet.iterator();
while (mySetIterator.hasNext()) {
     Object newObj = mySetIterator.next();
     Object mapObj = myMap.get(newObj);
}

Этот цикл while повторяется только один раз. Я не уверен, что здесь не так. Есть ли проблема?

Пожалуйста, помогите мне. Заранее спасибо.

Обновление:

Теперь я получаю ниже исключения в mySet.addAll(myMap.keySet());

<Oct 18, 2011 12:36:21 PM IST> <Error> <> <BEA-000000> <java.lang.NullPointerException
    at edu.emory.mathcs.backport.java.util.TreeMap.compare(TreeMap.java:934)
    at edu.emory.mathcs.backport.java.util.TreeMap.put(TreeMap.java:97)
    at edu.emory.mathcs.backport.java.util.TreeSet.add(TreeSet.java:149)
    at java.util.AbstractCollection.addAll(AbstractCollection.java:318)
    at edu.emory.mathcs.backport.java.util.TreeSet.addAll(TreeSet.java:165)

Ответы [ 3 ]

1 голос
/ 14 октября 2011

Невозможно иметь null в SortedSet, потому что для этой коллекции требуется вызов comparTo метода, поэтому это должны быть сопоставимые объекты / примитивы

1 голос
/ 14 октября 2011

Пожалуйста, проверьте метод сравнения в Ключевых объектах.

Если метод сравнения ключевого объекта указывает, что оба ключевых объекта сравнивают одинаково, тогда набор ключей будет иметь только одно значение, так как Set не допускает дублирования.Вы используете Treeset для хранения ваших ключей, поэтому в вашем методе сравнения может возникнуть проблема.

Пожалуйста, опубликуйте весь код в контексте, чтобы правильно найти проблему.

0 голосов
/ 14 октября 2011

Что произойдет, если вы сделаете это?

Iterator mySetIterator = myMap.keySet().iterator();
while (mySetIterator.hasNext()) {
     Object newObj = mySetIterator.next();
     Object mapObj = myMap.get(newObj);
}
...