улучшенный Итератор набора

Вы должны включить следующий элемент видового экрана во все свои веб-страницы:

Элемент видового экрана дает браузеру инструкции о том, как управлять размерами и масштабированием страницы.

width = device-width part устанавливает ширину страницы, которая будет соответствовать ширине экрана устройства (которая будет варьироваться в зависимости от устройства).

Часть initial-scale = 1.0 устанавливает начальный уровень масштабирования при первой загрузке страницы браузером.

12
задан Dónal 10 October 2008 в 17:44
поделиться

11 ответов

Можно добраться previous() легко, просто используя a java.util.ListIterator.

Быстрый взгляд на ту точку легко реализован путем выполнения a

public <T> T peek(ListIterator<T> iter) throws NoSuchElementException {
    T obj = iter.next();
    iter.previous();
    return obj;
}

К сожалению, будет легче иметь его как служебный метод, так как каждый класс набора реализует их собственные итераторы. Сделать обертку для получения метода быстрого взгляда на каждом наборе в некотором интерфейсе такой как MyListIterator была бы довольно большая работа.

10
ответ дан 2 December 2019 в 04:03
поделиться

Существует хорошая проклятая причина, универсальные операторы не реализуют эти опции: они не существуют для всего контейнера. Типичным примером является контейнер, представляющий некоторый внешний ввод данных, как файл, рассматриваемый как поток. Каждый раз, когда Вы читаете значение, Вы используете его и перемещаете указатель вперед, если Вы хотите его или нет. Если Вы налагаете эти ограничения на универсальные итераторы, то Вы освобождаете степень универсальности итераторов.

Если Вы хотите a previous метод, как предложено, использует ListIterator<>, который затем ограничивается контейнером, ведущим себя как списки.

4
ответ дан 2 December 2019 в 04:03
поделиться

Я думаю причина, они не реализованы, то, потому что они нетривиальны для некоторых наборов и оказали бы большое влияние производительности. Я думаю, что это было бы довольно просто, чтобы Вы сделали эту работу для наборов, о которых Вы заботитесь.

Мне также не нравится тот Java, итераторы не имеют никакого способа получить текущее значение, не перемещая его (и поэтому Вы не можете легко написать код, который переходит на основе значения, просто передав итератор - необходимо передать значение, которое Вы теперь имеете также).

8
ответ дан 2 December 2019 в 04:03
поделиться

Одной вещью, на которую я посмотрел бы, является реализация Seq в clojure

http://clojure.org/sequences

Реализация базовых классов находится в Java, и полный источник доступен. Seqs являются декораторами на итераторах Java (возьмите и реализуйте интерфейсы итератора Java) - но они также обеспечивают свой собственный интерфейс, который мог бы быть больше того, что Вы хотите - или по крайней мере начальная точка.

3
ответ дан 2 December 2019 в 04:03
поделиться

Как ykaganovich предложенный, Вы могли бы хотеть проверить материал наборов Google. Существует определенно некоторая поддержка некоторых вещей, которые Вы хотите, как заглядывание. Кроме того, как некоторые другие упомянули, реализовав все эти вещи для всех наборов, может быть опасным с точки зрения производительности или возможности.

1
ответ дан 2 December 2019 в 04:03
поделиться
public class Iterazor<T> {
  private Iterator<T> it;
  public T top;
  public Iterazor(Collection<T> co) {
    this.it = co.iterator(); 
    top = it.hasNext()? it.next(): null; 
  }
  public void advance() { 
    top = it.hasNext()? it.next(): null; 
  }
}

// usage

for(Iterazor<MyObject> iz = new Iterazor<MyObject>(MyCollection); 
    iz.top!=null; iz.advance())
  iz.top.doStuff();
}
1
ответ дан 2 December 2019 в 04:03
поделиться

Я никогда не сталкивался с проблемой, где мне был нужен быстрый взгляд (); Итератор работал просто великолепно для меня. Мне любопытно, как Вы используете итераторы, что Вы чувствуете, что Вам нужна эта добавленная функциональность.

0
ответ дан 2 December 2019 в 04:03
поделиться

Это кажется, что Вы могли бы быть более обеспеченным использованием Стека.

0
ответ дан 2 December 2019 в 04:03
поделиться

Наборы Java были записаны для обеспечения минимального набора полезной функциональности. Это - очень хороший подход для кода, который должен быть реализован любым реализующим Java. Чрезмерное увеличение размера интерфейса с функциональностью, которая могла бы быть полезной, может привести к значительному увеличению объема кода с улучшениями, замеченными только некоторыми. Если быстрый взгляд () и предыдущий () был частью стандартного итератора, который означает всех пишущие, что новый вид Набора должен реализовать его, разумно ли это или нет.

Итераторы также разработаны для работы над вещами, которые физически не могут пойти назад, делая быстрый взгляд () и предыдущий () оба невозможный.

0
ответ дан 2 December 2019 в 04:03
поделиться

Я видел, что кто-то связался с коллекциями Google, но никто не упомянул, что метод, который вы ищете, называется Iterators.peekingIterator ().

Тем не менее, было бы лучше, если бы вы могли просто используйте ListIterator.

2
ответ дан 2 December 2019 в 04:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: