Исправление java.lang.UnsupportedOperationException
Предполагается, что этот метод находит наименьшее значение в коллекции, превышающее ключ. Я продолжаю получать исключение java.lang.UnsupportedOperationException, и я не могу понять, как это исправить. Заранее благодарю за любую помощь.
public static <T> T ceiling(Collection<T> c, T key, Comparator<T> comp) {
T ceiling = null;
if (c == null || comp == null) {
throw new IllegalArgumentException();
}
else if (c.size() == 0) {
throw new NoSuchElementException();
}
else {
Iterator<T> itr = c.iterator();
while (itr.hasNext()) {
if (comp.compare(itr.next(), key) < 0) {
itr.remove();
}
}
}
if (c.size() == 0) {
throw new NoSuchElementException();
}
else {
Iterator<T> itr2 = c.iterator();
ceiling = itr2.next();
while (itr2.hasNext()) {
T temp2 = itr2.next();
if (comp.compare(temp2, ceiling) < 0) {
ceiling = temp2;
}
}
}
return ceiling;
}
1 ответ
Скорее всего, вы пытаетесь изменить коллекцию, которую нельзя изменить.
Я предлагаю вам изменить метод, чтобы не изменять коллекцию. (Также я предлагаю вам прочитать трассировку стека, чтобы понять, что это значит)
Что-то вроде этого
public static <T> T ceiling(Collection<T> c, T key, Comparator<T> comp) {
if (c == null || comp == null)
throw new NullPointerException();
T ret = null;
for (T t : c)
if (comp.compare(t, key)>=0 && (ret==null || comp.compare(t, ret)<0))
ret = t;
return ret;
}