ListIterator etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ListIterator etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

20 Mayıs 2018 Pazar

Iterator Arayüzü

Giriş
C++'ta bir çok iterator şöyledir.
In C++, we have end() where the iterator ends up at the position one past the last element
Bellekte şöyledir.
Blue Green Purple
  ^    ^     ^    ^
begin            end
Bu arayüz C++'taki gibi belirli bir bellek modeli sunmaz.

Tanımlama
Şöyle yaparız
java.util.Iterator<E>;
forEachRemaining metodu
Açıklaması şöyle.
Performs the given action for each remaining element until all elements have been processed or the action throws an exception. Actions are performed in the order of iteration, if that order is specified. Exceptions thrown by the action are relayed to the caller.
Örnek
Şöyle yaparız. Döngüden çıkmak için exception fırlatmak gerekir. return yeterli değildir.
List<String> names = new ArrayList<>();
names.add("A");
names.add("B");
names.add("C");
ListIterator<String> nameIterator = names.listIterator();
nameIterator.forEachRemaining(name -> {
  if (name.equals("B")) {
    System.out.println("Found");
    return;
  }
  System.out.println(name);
});
hasNext metodu
E tipinin String olduğunu varsayarsak şöyle yaparız.
while (iterator.hasNext()) {
  String color = iterator.next();
}
next metodu
Şöyle yaparız.
class SkippingIterator<T> implements Iterator<T> {
  private List<T> list;
  private currentPosition;
  private int skipBy;
  public SkippingIterator(List<T> l) {
    this(l, 2);
  }
  public SkippingIterator(List<T> l, int skip) {
    this(l, skipBy, 0);
  }
  public SkippingIterator(List<T> l, int skip, int startPosition) {
    list = l;
    skipBy = skip;
    currentPosition = startPosition;
  }
  public boolean hasNext() {
    return currentPosition < list.size();
  }
  public T next() {
    T result = list.get(currentPosition);
    currentPosition += skip;
    return result;
  }
}

remove metodu
Örnek ver

16 Nisan 2018 Pazartesi

ListIterator Arayüzü

Giriş
Bu arayüzden kalıtmak istersek şöyle yaparız.
class MyLisIterator implements ListIterator<String>{
  ...
}
add metodu
İmzası şöyle
@Override
public void add(String data);
hasNext metodu
İmzası şöyle
@Override
public boolean hasNext();
hasPrevious metodu
İmzası şöyle
@Override
public boolean hasPrevious();
next metodu
İmzası şöyle
@Override
public String next();
nextIndex metodu
İmzası şöyle
@Override
public int nextIndex();
previous metodu
İmzası şöyle
@Override
public String previous();
previousIndex metodu
İmzası şöyle
@Override
public int previousIndex();
Örnek
Belirtilen koşulu sağlayan nesnenin indeksini bulmak için şöyle yaparız.
public static <T> int indexOf(List<T> list, Predicate<? super T> predicate) {
  for(ListIterator<T> iter = list.listIterator(); iter.hasNext(); )
    if(predicate.test(iter.next()))
      return iter.previousIndex();
  return -1;
}
remove metodu
İmzası şöyle
@Override
public void remove();
set metodu
İmzası şöyle
@Override
public void set(String data);