SORU
20 Ocak 2010, ÇARŞAMBA


Java tersten bir liste boyunca yineleme

Kod parçası jenerik yararlanmak için geçiş yapıyorum. Bunu yapmak için bir bağımsız değişken için döngü dizinleri kayıtlarını tutmak, apaçık bir yineleyici kullanarak daha çok daha temiz olmasıdır.

Yaklaşık yarım durumlarda, list (ArrayList) bir dizin kullanarak tersten tekrarlanır.

Birisi Bu koleksiyon ile çalışırken döngü endeksli sevmediğim beri) yapmak için daha temiz bir yol önerebilirsiniz?

 for (int i = nodes.size() - 1; i >= 0; i--) {
    final Node each = (Node) nodes.get(i);
    ...
 }

Not:Bu yapışkan notlar dışında herhangi bir yeni bağımlılıkları eklemek istemiyorum.

Kabul cevabı aldı ve döndü:

class ListReverser<T> implements Iterable<T> {
    private ListIterator<T> listIterator;        

    public ListReverser(List<T> wrappedList) {
        this.listIterator = wrappedList.listIterator(wrappedList.size());            
    }               

    public Iterator<T> iterator() {
        return new Iterator<T>() {

            public boolean hasNext() {
                return listIterator.hasPrevious();
            }

            public T next() {
                return listIterator.previous();
            }

            public void remove() {
                listIterator.remove();
            }

        };
    }

}

Olarak kullanılabilir:

for (final Node each : new ListReverser<Node>(nodes)) {
   //...
}

Harika, ama daha iyi değil.

CEVAP
20 Ocak 2010, ÇARŞAMBA


Bunu deneyin:

// Substitute appropriate type.
ArrayList<...> a = new ArrayList<...>();

// Add elements to list.

// Generate an iterator. Start just after the last element.
ListIterator li = a.listIterator(a.size());

// Iterate in reverse.
while(li.hasPrevious()) {
  System.out.println(li.previous());
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chanre Joubert

    Chanre Joube

    27 Temmuz 2012
  • EminemMusic

    EminemMusic

    9 ŞUBAT 2007
  • geraldnonadoez

    geraldnonado

    3 Temmuz 2013