Исправление 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;
}
Другие вопросы по тегам